PDA

Vollständige Version anzeigen : BAT Datei - 1) Spalte in csv machen - 2) alle csv Dateien zusammenkopieren


galaxy
08.07.2009, 13:00
Hallo,

Ich habe mehrere .csv Dateien in einem Ordner mit dem gleichen Aufbau. Der Name der Dateien ist auch immer gleich, bis auf die ersten 3 Zeichen. Beispielnamen fuer ein File:

bmw_AUTOS.txt, aud_AUTOS.txt, etc

Der Aufbau eines solchen files ist folgendermassen (fuer “bmw”):

TYP,Hubraum,Anzahl_Tueren,ID
3er,1900,4,1
3er,1900,4,2
5er,4400,4,3
Z4,4400,2,4


Jetzt brauche ich folge

1) Einfuegen einer Spalte in die Files:

- Alle files in die sich in dem angegebenen Ordner befinden sollen durchlaufen werden.
- Die ersten 3 Zeichen des Dateinamen (in meinem Beispiel also “bmw” oder “aud”) sollen in die jeweilige Datei als erste Spalte geschrieben werden (Also vor jeden Datarecord), in GROSSCHREIBUNG und auch Komma getrennt.
- Die Ueberschrift fuer diese neue Spalte soll “AutoMarke” sein.

Ergebnis nach der benoetigten Bearbeitung soll so aussehen (fuer “bmw”):

AutoMarke,TYP,Hubraum,Anzahl_Tueren,ID
BMW,3er,1900,4,1
BMW,3er,1900,4,2
BMW,5er,4400,4,3
BMW,Z4,4400,2,4


2) Alle Files des Ordners zusammenkopieren

- Alle files in die sich in dem angegebenen Ordner befinden sollen durchlaufen werden.
- Die gesamten Inhalte der Files sollen zusammen kopiert werden (Ueberschriften sollen enthalten sein)

Ergebnis nach der benoetigten Bearbeitung soll so aussehen (fuer “bmw” und “aud”):

AutoMarke,TYP,Hubraum,Anzahl_Tueren,ID
BMW,3er,1900,4,1
BMW,3er,1900,4,2
BMW,5er,4400,4,3
BMW,Z4,4400,2,4
AutoMarke,TYP,Hubraum,Anzahl_Tueren,ID
AUD,A4,1900,4,1
AUD,A6,1900,4,2


Am besten waere die Ueberschrift nur einmal enthalten, aber ich wuesste nicht wie man so etwas umsetzen sollte.

Pseudocode wuerde irgendwie so aussehen:

Fuer jede Datei aus gegebenem Ordner
_Name auslesen
--ersten 3 char des Names in Var schreiben
--- ersten 3 char in uppercase for jeden Datarecord schreiben
----Ueberschrift fuer neue Spalte eintragen (AutoMarke)
Ende Fuer Schleife 1

Fuer jede der gerade bearbeiteten Dateien
_ Copy zu einem HauptFile
Ende Fuer Schleife 2


Kann mir jemand bei der Loesung dieses Problems helfen? (Vielleicht hat ja jemand schon einmal ein aehliches Problem gehabt)

Vielen Dank schonmal fuer Tipps im Voraus!

IngGi
08.07.2009, 16:15
Hallo Galaxy,

ich hätte eine Lösung per VB-Script anzubieten. Die Quelldateien stehen in C:\Test, die Gesamtdatei heißt AlleMarken.txt und steht in C:\:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Const</span> ForReading = 1
<span class="TOKEN">Const</span> ForWriting = 2
&nbsp;
<span class="TOKEN">Dim</span> objFSO
<span class="TOKEN">Dim</span> objFolder
<span class="TOKEN">Dim</span> objFile
<span class="TOKEN">Dim</span> objFileS
<span class="TOKEN">Dim</span> objFileT
<span class="TOKEN">Dim</span> strZeile
&nbsp;
&nbsp;
<span class="TOKEN">Set</span> objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
<span class="TOKEN">Set</span> objFolder = objFSO.GetFolder(&quot;C:\Test&quot;)
&nbsp;
<span class="TOKEN">Set</span> objFileT = objFSO.OpenTextFile(&quot;C:\AlleMarken.txt&quot;, ForWriting, <span class="TOKEN">True</span>)
objFileT.Write &quot;AutoMarke,TYP,Hubraum,Anzahl_Tueren,ID&quot; &amp; Chr(13) &amp; Chr(10)
&nbsp;
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> objFile <span class="TOKEN">In</span> objFolder.Files
set objFileS = objFSO.OpenTextFile(objFile.Path, ForReading)
strZeile = objFileS.ReadLine
<span class="TOKEN">Do</span> until objFileS.AtEndOfStream
strZeile = objFileS.ReadLine
strZeile = UCase(Left(objFile.Name, 3)) &amp; &quot;,&quot; &amp; strZeile
objFileT.Write strZeile &amp; Chr(13) &amp; Chr(10)
<span class="TOKEN">Loop</span>
objFileS.Close
<span class="TOKEN">Next</span> <span class="REM">'objFile</span>
&nbsp;
objFileT.Close</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf

galaxy
09.07.2009, 09:39
Hallo,

Danke schonmal fuer deine Email. Habe dazu aber noch 3 Fragen:

1) (Da ich bisher VB nur ein wenig in Access benutzt habe, dieser Code hier aber unabhaengig von Access, Word etc ausfuehrbar sein soll) Wo gebe ich diesen Code denn jetzt ein damit ich ihn ausfuehren kann?

2) Ich moechte den Code am liebsten mit einem Click auf eine (.bat) Datei starten. Ist sowas moeglich?

3) Muss ich noch eine Art Libary irgendwo aktivieren das dieser Code ausgefuehrt werden kann?

Vielen Dank schon mal fuer die Tipps und den Code

IngGi
09.07.2009, 10:16
Hallo Galaxy,

du kannst VB-Scriptcode behandeln, wie du auch einen DOS-Batchcode behandeln würdest. Also einfach in eine Textdatei kopieren und diese speichern. Unterschiede: An Stelle der Dateiendung .bat für DOS-Batchscripte musst du für VB-Scripte die Dateiendung .vbs verwenden. Ausserdem muss der Windows-Scriptinghost installiert und aktiv sein - das ist aber standardmäßig der Fall. Das VB-Script lässt sich dann wie eine Batchdatei per Doppelklick starten.

Gruß Ingolf

galaxy
09.07.2009, 11:46
Hallo Ingolf,

Vielen Dank fuer deine Hilfe. Funktioniert perfekt!

Gruss,