qwaxxy
Goto Top

Textdatei mit VBScript bearbeiten für Anfänger

Hallo,

ich möchte mittels eines *.vbs Script mehrere Textdateien auf unterschiedliche Art bearbeiten aber leider habe ich recht wenig Programmierkenntnisse, bin aber sehr wissbegierig.

Die erste Datei hat folgenden Aufbau (Spalten sind immer mit ; getrennt):

5517;17,012345;2010-03-03 07:45:03.980;Text;242;2076;;;;56.88;;nnn; usw.

Wie kann ich einzelne Spalten löschen?
Ich möchte z.B. Angeben lösche die 1.+5.+9. Spalte usw..

In der 2. Spalte steht eine Zahl die ich in zwei Spalten auftrennen muss, Zahl links vom Komma und rechts davon in jeweils eine neue Spalte

Dann sollte noch die 3. Spalte mit dem Datum und Uhrzeit in 2 Spalten aufgetrennt werden nach dem Format TT.MM.JJ und die Uhrzeit in hh:mm:ss

Weiterhin muss dann noch in allen Zahlenwerten der . durch ein Komma ersetzt werden

Ergebnis: 03.03.2010;07:45:03;17;012345;Text;242;2076;56,88


Die andere Datei ist ähnlich aufgebaut und hier sollen jeweils von bestimmten Spalten die Mittelwerte bestimmt werden, Ergebnis in neue *.txt oder direkt in die Datei (alte Zeilen löschen)

Text_1;3;076720;38.00;14.38;0;0;53;11.83;12.10;5.06;5.07
Text_2;3;076721;37.00;24.38;0;0;53;11.11;12.10;5.06;5.17
Text_3;3;076722;38.00;14.38;0;0;53;11.83;12.10;5.06;5.07
Text_1;3;076720;28.00;22.38;0;0;33;12.83;13.10;6.06;7.07
Text_2;3;076721;37.00;24.38;0;0;33;19.11;14.10;6.06;9.17
Text_3;3;076722;40.00;55.38;0;0;57;17.83;15.10;8.06;8.07


Hier sollte von allen Zeilen in denen in Spalte 3 der gleiche Inhalt steht jeweils der Mittelwert berechnet werden.
Die Datei hat mehrere tausend Zeilen.

Ergebnis:

Text_1;3;76720;33;18.38;0;0;43;12.33;12.6;5.56;6.07
Text_2;3;76721;37;24.38;0;0;43;15.11;13.1;5.56;7.17
Text_3;3;76722;39;34.88;0;0;55;14.83;13.6;6.56;6.57


Ist das "relativ" einfach realisierbar?

Kann mir bitte jemand einige Tipps bzw. Codebeispiele geben?

Vielen Dank

Steffen

Content-Key: 137512

Url: https://administrator.de/contentid/137512

Printed on: April 19, 2024 at 16:04 o'clock

Member: Snowman25
Snowman25 Mar 05, 2010 at 11:18:26 (UTC)
Goto Top
Öffne es in Excel oder einem anderen Tabellenkalkulationsprogramm als *.csv-Datei (muss jedes dieser programme lesen könnnen) und schreib dir da ein entsprechendes Macro mit z.B. VBA (Visual basic for Applications)

Gruß
Snow
Member: qwaxxy
qwaxxy Mar 05, 2010 at 15:46:12 (UTC)
Goto Top
Hallo Snow,

mit Excel ist das kein Problem aber auf dem Rechner ist das nicht vorhanden, deshalb wollte ich es mit Windows Bordmitteln erledigen.

Mal schauen wie ich es gelöst bekomme.
Member: Snowman25
Snowman25 Mar 05, 2010 at 15:50:06 (UTC)
Goto Top
Dann schau mal hier: CSV to Array
Danach kannst du ja mit dem Array machen, was du willst.

Gruß
Snow
Mitglied: 76109
76109 Mar 05, 2010 at 16:26:39 (UTC)
Goto Top
Hallo qwaxxy!

Das sollte Dir für's erste mal weiterhelfen (*.vbs):
Const In02Zahl = 1
Const In03Date = 2
Const In04Text = 3
Const In05Zahl = 4
Const In06Zahl = 5
Const In10Zahl = 9

Dim Csv1, Csv2(7), Zahl, Wert1, Wert2

Text = "5517;17,012345;2010-03-03 07:45:03.980;Text;242;2076;;;;56.88;;nnn"  
    
Csv1 = Split(Text, ";")  
    
Zahl = Split(Csv1(In02Zahl), ",")  
    
Wert1 = Zahl(0)
    
If UBound(Zahl) = 1 Then Wert2 = Zahl(1) Else Wert2 = 0
    
Csv2(0) = FormatDateTime(Split(Csv1(In03Date), ".")(0), vbShortDate)  
Csv2(1) = FormatDateTime(Split(Csv1(In03Date), ".")(0), vbLongTime)  
Csv2(2) = Replace(Wert1, ".", ",")  
Csv2(3) = Replace(Wert2, ".", ",")  
Csv2(4) = Csv1(In04Text)
Csv2(5) = Replace(Csv1(In05Zahl), ".", ",")  
Csv2(6) = Replace(Csv1(In06Zahl), ".", ",")  
Csv2(7) = Replace(Csv1(In10Zahl), ".", ",")  
    
MsgBox Join(Csv2, ";")  
Beachten, dass die Arrays bei 0 anfangen zu zählen z.B Array 0-7 = Spalte 1-8

Gruß Dieter

[edit] Zeile 23 geändert, falls auch Punkt zum ersetzen [/edit]
Member: bastla
bastla Mar 05, 2010 at 16:26:43 (UTC)
Goto Top
Hallo qwaxxy und willkommen im Forum!

Für die erste Datei etwa so:
Datei = "Z:\Datei1.txt"  
Delim = ";" 'Feldtrennzeichen  

Set fso = CreateObject("Scripting.FileSystemObject")  

'Gesamten Dateiinhalt einlesen und zeilenweise aufgeteilt im Array T() ablegen  
T = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLf)

Neu = "" 'Variable für berarbeiteten Dateiinhalt vorbereiten  
'In einer Schleife alle Zeilen durchgehen  
For Each Z In T
    'Zeile anhand des Trennzeichens aufteilen und im Array S() ablegen  
    S = Split(Z, Delim)
    'Variable für Ausgabezeile löschen ...  
    Aus = ""  
    '... und darin in der gewünschten Reihenfolge die neue Zeile zusammensetzen  
    
    'Datum und Zeit trennen (Leerzeichen ist als Trennzeichen Default)  
    '     Datumsschreibweise umwandeln und Zeitangabe auf die ersten 8 Stellen reduzieren  
    Datum = Split(S(2))(0) 'erster Teil des Feldes 3 (Index ist 2, da nullbasiert)  
    D = Split(Datum, "-") 'Array für Datumsbestandteile  
    Datum = D(2) & "." & D(1) & "." & D(0) 'Datum neu zusammensetzen  
    
    Zeit = Left(Split(S(2))(1), 8) 'erste 8 Stellen des zweiten Teiles des Feldes 3  
    'Datum und Zeit (getrennt) an den Beginn der Zeile stellen  
    Aus = Datum & Delim & Zeit
    
    'Zahl aus Feld 2 anhand des enthaltenen Kommas aufteilen und der Zeile hinzufügen  
    Aus = Aus & Delim & _
        Split(S(1), ",")(0) & Delim & _  
        Split(S(1), ",")(1)  

    'Restliche benötigte Felder hinzufügen (und, bei Bedarf, Punkt durch Komma ersetzen)  
    Aus = Aus & Delim & S(3) 'Text  
    '    - je nach Anzahl und Art der Felder könnten auch Schleifen verwendet werden, zB  
    For i = 5 To 7
        Aus = Aus & Delim & Replace(S(i), ".", ",") 'jeweils Zahl  
    Next
    Aus = Aus & Delim & Replace(S(9), ".", ",") 'Zahl  
    Aus = Aus & Delim & Replace(S(10), ".", ",") 'Zahl  
    Aus = Aus & Delim & S(11) 'Text  
    ' ...  
	
    'Fertige Ausgabezeile dem neuen Dateiinhalt nach einer Zeilenschaltung hinzufügen  
    Neu = Neu & vbCrLf & Aus
Next

'Neuen Dateiinhalt in alte Datei schreiben (diese dazu neu erstellen)  
'(Da sich am Beginn von "Neu" eine Zeilenschaltung, bestehend aus den 2 Zeichen CR und LF, befindet,  
'Inhalt erst ab dem dritten Zeichen verwenden)  
fso.CreateTextFile(Datei).Write Mid(Neu, 3)
Anmerkung: Es wird vorausgesetzt (und daher nicht geprüft), dass der Satzaufbau korrekt ist bzw Deinem Beispiel entspricht - und daher zB in Feld 2 tatsächlich zwei durch Komma getrennte Zahlen vorhanden sind) ...

Grüße
bastla

[Edit] @76109: Sehr effizient face-smile; ich dachte, wir sollten einem neuen Mitglied etwas mehr bieten face-wink ... [/Edit]
Mitglied: 76109
76109 Mar 05, 2010 at 16:30:04 (UTC)
Goto Top
Hallo bastla!

Wow, 4 Sekunden zu langsamface-smile

Gruß Dieter

PS Und gleich wieder das volle Programmface-wink
Member: bastla
bastla Mar 05, 2010 at 16:32:41 (UTC)
Goto Top
@76109
[OT]
Wow, 4 Sekunden zu langsamface-smile
Sowohl mit den 4 Sekunden, als auch mit der Tatsache, dass Du schneller warst, kann ich gut leben ... face-wink
[/OT]

Grüße
bastla
Mitglied: 76109
76109 Mar 05, 2010 at 16:37:36 (UTC)
Goto Top
@bastla
[OT]
Zitat von @bastla:
Sowohl mit den 4 Sekunden, als auch mit der Tatsache, dass Du schneller warst, kann ich gut leben ... face-wink
Daran hege ich keine Zweifelface-wink
[/OT]

Gruß Dieter