5.2k Aufrufe
Gefragt in WindowsXP von romero Mitglied (323 Punkte)
Guten Tag liebe Forenleser.

Habe ein Porblem bzw. suche nach einer Lösung mittels einem Batch, und es soll wirklich ein Batch sein!!!

Und zwar geht das dadrum, das Daten aus einer Exceltabelle ausgelesen werden, verarbeitet und dann wieder ausgegeben werden.

Worum geht es:

I. Grundlegende Dinge, was der Batch beinhalten soll.

- zu einem soll im Batch der Typ genannt werden, welchen man nur einmal angibt, er aber das dann immer wieder verwendet. Also oben gibt man an, um welchen z.B. genaue Flugzeugtyp A330 (wobei z.B. die Flugzeugtypen A330, A333, A332 ,A340 alle unter A340 laufen -> Übergeordnete Flugzeugtyp)
- weiterhin die Sektionen, wo es hinkommt, z.B. Sektion13-14 (wobei nur die Zahlen wichtig sind)
- zum anderen, welchen neuen Bereich er anlegen soll, z.B. CC104


Diese sollten sozusagen als Kopf verändert werden können.


II. Danach soll der Batch diese Daten aus einer Excel-Tabelle auslesen.

- die Tabelle liegt z.B. auf G:\Tabelle\übergeordneter Flugzeug\... und da entweder unter Sektion13-14 oder einem anderen (der Pfad sollte veränderbar sein).
- da soll er dann das Tabellenblatt mit dem oben angegeben Bereich suchen und die Daten ab der 8. Zeile und der 1. Spalte auslesen.
- die Tabelle starten mit einer ITEM-Nr., einer Anzahl und einer Nummer. Diese sollten verarbeitet werden.
- so eine ITEM-Nr. besteht immer aus 3 Zahlen, z.B 732, die Anzahl ist unterschiedlich, z.B. 2 und die Nummer des Werkstückes lautet z.B.: F258-71732-008-00

Das sind die grundlegenden Eigenschaften der Tabelle, welche für später benötigt werden.


III. Als nächstes sollen diese Daten verarbeitet werden und aus einem anderen Ordner ausgelesen werden.

- die Werkstücksnummer muss dann soll aussehen, dass aus der "alten" eine "neue" entsteht, also: aus F258-71732-008-00 -> F258_71732_008 (die Endung sollte alle Endungen beinhalten, also ein "*" an der Stelle).
- danach sollte in dem Ordner gegangen werden, wo diese Daten, welche ausgelesen werden sollen, drinstehen, z.B. O:\Werkstücke\A340 (da wieder dieser Flugzeugtyp) \...
- dort sollen alle diese Werkstücke ausgelesen werden, welche z.B. mit F258_71732_008 beginnen. Da aber in diesem Ordner auch ältere Versionen liegen, brauche ich da nur die neusten. Diese werden mit dem Buchstaben gekennzeichnet, genannt ISSUE. Also von F258_71732_008 auf F258_71732_008D.* -> das "D" ist der Issue bzw. die Version (weil da auch Werkstücke mit anderen Versionen vorhanden sind, z.B. "A", "B", ...) und das "*", die Endung. Aber: nach dem Buchstaben "Z", soll die Zählweise von "vorn" beginnen aber mit "AA". Der PC sortiert aber das "AA" zwischen "A" und "B", das sollte aber nach dem ISSUE "Z" kommen. Das unbedingt beachten.
- nachdem er die Daten gefunden hat, soll er alle Werkstücke, welche mit dieser Nummer vorhanden sind, ausgeben. D.h. es gibt als letzten Schritt die ganzen einzelnen Stücke zu suchen. Aus F258_71732_008D wird F258_71732_008D_20b.* & F258_71732_008D_10s.* & F258_71732_008D_10k.* & F258_71732_008D_11k.* & F258_71732_008D_12k.* -> diese letztgenannten Daten liegen in diesem großen Topf und werden benötigt. Dabei können auch andere Einzelteile liegen, wie z.B. mit _11s, _10l, _10b, _11b, _22b, ... also mehrere verschiedene. Und da hinter soll dann die Anzahl der Werkstücke stehen, also z.B. 2mal: F258_71732_008D_20b_2.*
- sollte da mal ein Einzelstück nicht vorhanden sein, soll er am Ende der Suche, eine Fehlermeldung bringen, dass bestimmte Teile noch fehlen.
- diese soll er in eine *.txt ausgeben, welche sich wie folgt zusammen setzt: STL_"oben angebene Flugzeugtyp"_"Bereich".txt in den Ordner z.B. H:\Teile\STLs\"übergeordneter Flugzeugtyp"\

Nachdem er dies gemacht hat ist er mit diesem Teil fertig. Die STL ist geschrieben und kann verwendet werden.


IV. ITEM suchen und kopieren

- als nächstes soll er auf D:\"oben genannter Flugzeugtyp"\ ein Bereich anlegen (wie oben angegeben)
- dort soll er die ITEMs reinkopieren, welche benötigt werden. Also aus diesem Flugzeugtyp rauskopieren und da einfügen -> Daten wurden aus der Exceltabelle entnommen
- die Werkstücksnummer sieht da wie folgt aus: F258_71732_008D_0732.txt oder wenn mehr als 2mal vorkommen sollte dann: F258_71732_008D_0732_2_2.txt (bei speziellen Anzahlen muss dies per Hand gehen, da es jetzt zu schwierig zu beschreiben ist bzw. die Überprüfung erfolgt dann noch "per Hand")
- auch da soll es eine Fehlermeldung geben wenn diese nicht vorhanden ist. Aber er soll diese dann selber erstellen, wie gerade beschrieben: F258_71732_008D -> "Sektion"_F258_71732_008D_0"ITEM"_"Anzahl"_"Anzahl".txt

So das wars erstmal von meiner Seite. Ich hoffe, ich hab das Probelm ordentlich beschrieben und ihr könnt damit was anfangen. Wenn ihr Fragen habt oder nicht genau wisst was zu machen ist, mich bitte Fragen.

ihc hoffe einer von euch kann mir helfen. Ich weiß, das es sowas gibt, denn ich habe sowas selber schonmal auf meiner Arbeit benutzt. Zwar nicht so in der Art aber halt ähnlich.

Also hoffe auf einen Profi, welcher mir dabei helfen kann.

LG Romero

16 Antworten

0 Punkte
Beantwortet von joshuan Mitglied (545 Punkte)
Hm. Wie tut man merken was der letzte Eintrag in Spalte 3 is? Ich krieg es nich hin. In vba geht es mit Range("C65535").End(xlUp).Row aber von der Batch funzt es einfach nich. :-(
Wie lang is Spalte 3 ungefähr und tut es zwischen drinne leere Einträge geben oder nich?

Ach so keine Ahnung zu deine andren Probleme was du da grad hast. Bin nich so der Batcher. ;-)
0 Punkte
Beantwortet von joshuan Mitglied (545 Punkte)
Ok is gelöst. xlUp is -4162. Jetz funtz ;-)
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
Suppi...

Also die Länge unterschiedlich.mal sind es 20 oder halt 50 oder mehr. Kommt darauf an was ich so rein tippsle :D

Kannst du es mir mal schicken? Wenn es keine Umstände macht?

Und kann ich da, wenn ich will, weitere Daten auslesen und an die ausgelesenen Daten dranhängen? Also in Spalte 8 steht folgender Inhalt: VW Golf. Aber in der 4. Spalte steht "4". Kann ich dann das so weiterschreiben, dass dann in der ausgelesenen Datei folgendes steht? VW Golf_4.

Kann doch sicherlich, sofern du mir dein Code gibst, ihn anpassen oder?
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
Wie kann ich den ausgelesenen Inhalt umbennen?

Denke das die ausgelesene Datei ne TXT ist. Wie kann ich das dann so umbennen wie ich sie brauche???

Hab irgendwie gelesen, dass soll mit FOR gehen. Aber wie???

Hab dazu folgendes gefunden:

for /f "tokens=*" %%k IN LISTE.TXT DO (SET ParsedLine=%%k) & (call :Sub1)

:Sub1
SET ParsedLine=%ParsedLine:*-*-*-*=*_*_*_*%
ECHO %ParsedLine% > BEISPIEL.TXT

Ist das so richtig?
Also der Inhalt soll von 1-2-3-4 in 1_2_3_4 bzw in 1_2_3 umbenannt werden... aber das macht er bei mir nicht...
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
Hab rausgefunden, dass er mit FIND und "zeichenfolge" die Daten nach bestimmten Kriterien "sortieren" kann. Also das er als erstes alles nach *k.txt und dann nach *b.txt auflisten soll. aber er soll zu erst die Dateien finden welche bis zur 10 Stelle gleich sind bzw die erstmal auflisten, welche er unter einem bestimmten Namen findet: z.B. 123456* sind mehrere Dateien zu finden, u.a. mit *k.* oder *b.* oder ...

Soll erst nach der Nummer gucken, alles auflisten, dann nach *k.* oder ... sortieren.
0 Punkte
Beantwortet von romero Mitglied (323 Punkte)
Hallo???Warum antwortet keiner mehr hier???

Joshuan?Warum meldest du dich nicht mehr?
...