qwaxxy

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
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 137512

Url: https://administrator.de/forum/textdatei-mit-vbscript-bearbeiten-fuer-anfaenger-137512.html

Ausgedruckt am: 25.04.2025 um 08:04 Uhr

Snowman25
Snowman25 05.03.2010 um 12:18:26 Uhr
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
qwaxxy
qwaxxy 05.03.2010 um 16:46:12 Uhr
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.
Snowman25
Snowman25 05.03.2010 um 16:50:06 Uhr
Goto Top
Dann schau mal hier: CSV to Array
Danach kannst du ja mit dem Array machen, was du willst.

Gruß
Snow
76109
76109 05.03.2010 um 17:26:39 Uhr
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]
bastla
bastla 05.03.2010 um 17:26:43 Uhr
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]
76109
76109 05.03.2010 um 17:30:04 Uhr
Goto Top
Hallo bastla!

Wow, 4 Sekunden zu langsamface-smile

Gruß Dieter

PS Und gleich wieder das volle Programmface-wink
bastla
bastla 05.03.2010 um 17:32:41 Uhr
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
76109
76109 05.03.2010 um 17:37:36 Uhr
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