Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Textdatei mit VBScript bearbeiten für Anfänger

Frage Entwicklung Batch & Shell

Mitglied: qwaxxy

qwaxxy (Level 1) - Jetzt verbinden

05.03.2010, aktualisiert 11:49 Uhr, 10009 Aufrufe, 8 Kommentare

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

Gruß
Snow
Bitte warten ..
Mitglied: 76109
05.03.2010 um 17:26 Uhr
Hallo qwaxxy!

Das sollte Dir für's erste mal weiterhelfen (*.vbs):
01.
Const In02Zahl = 1 
02.
Const In03Date = 2 
03.
Const In04Text = 3 
04.
Const In05Zahl = 4 
05.
Const In06Zahl = 5 
06.
Const In10Zahl = 9 
07.
 
08.
Dim Csv1, Csv2(7), Zahl, Wert1, Wert2 
09.
 
10.
Text = "5517;17,012345;2010-03-03 07:45:03.980;Text;242;2076;;;;56.88;;nnn" 
11.
     
12.
Csv1 = Split(Text, ";") 
13.
     
14.
Zahl = Split(Csv1(In02Zahl), ",") 
15.
     
16.
Wert1 = Zahl(0) 
17.
     
18.
If UBound(Zahl) = 1 Then Wert2 = Zahl(1) Else Wert2 = 0 
19.
     
20.
Csv2(0) = FormatDateTime(Split(Csv1(In03Date), ".")(0), vbShortDate) 
21.
Csv2(1) = FormatDateTime(Split(Csv1(In03Date), ".")(0), vbLongTime) 
22.
Csv2(2) = Replace(Wert1, ".", ",") 
23.
Csv2(3) = Replace(Wert2, ".", ",") 
24.
Csv2(4) = Csv1(In04Text) 
25.
Csv2(5) = Replace(Csv1(In05Zahl), ".", ",") 
26.
Csv2(6) = Replace(Csv1(In06Zahl), ".", ",") 
27.
Csv2(7) = Replace(Csv1(In10Zahl), ".", ",") 
28.
     
29.
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]
Bitte warten ..
Mitglied: bastla
05.03.2010 um 17:26 Uhr
Hallo qwaxxy und willkommen im Forum!

Für die erste Datei etwa so:
01.
Datei = "Z:\Datei1.txt" 
02.
Delim = ";" 'Feldtrennzeichen 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
 
06.
'Gesamten Dateiinhalt einlesen und zeilenweise aufgeteilt im Array T() ablegen 
07.
T = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLf) 
08.
 
09.
Neu = "" 'Variable für berarbeiteten Dateiinhalt vorbereiten 
10.
'In einer Schleife alle Zeilen durchgehen 
11.
For Each Z In T 
12.
    'Zeile anhand des Trennzeichens aufteilen und im Array S() ablegen 
13.
    S = Split(Z, Delim) 
14.
    'Variable für Ausgabezeile löschen ... 
15.
    Aus = "" 
16.
    '... und darin in der gewünschten Reihenfolge die neue Zeile zusammensetzen 
17.
     
18.
    'Datum und Zeit trennen (Leerzeichen ist als Trennzeichen Default) 
19.
    '     Datumsschreibweise umwandeln und Zeitangabe auf die ersten 8 Stellen reduzieren 
20.
    Datum = Split(S(2))(0) 'erster Teil des Feldes 3 (Index ist 2, da nullbasiert) 
21.
    D = Split(Datum, "-") 'Array für Datumsbestandteile 
22.
    Datum = D(2) & "." & D(1) & "." & D(0) 'Datum neu zusammensetzen 
23.
     
24.
    Zeit = Left(Split(S(2))(1), 8) 'erste 8 Stellen des zweiten Teiles des Feldes 3 
25.
    'Datum und Zeit (getrennt) an den Beginn der Zeile stellen 
26.
    Aus = Datum & Delim & Zeit 
27.
     
28.
    'Zahl aus Feld 2 anhand des enthaltenen Kommas aufteilen und der Zeile hinzufügen 
29.
    Aus = Aus & Delim & _ 
30.
        Split(S(1), ",")(0) & Delim & _ 
31.
        Split(S(1), ",")(1) 
32.
 
33.
    'Restliche benötigte Felder hinzufügen (und, bei Bedarf, Punkt durch Komma ersetzen) 
34.
    Aus = Aus & Delim & S(3) 'Text 
35.
    '    - je nach Anzahl und Art der Felder könnten auch Schleifen verwendet werden, zB 
36.
    For i = 5 To 7 
37.
        Aus = Aus & Delim & Replace(S(i), ".", ",") 'jeweils Zahl 
38.
    Next 
39.
    Aus = Aus & Delim & Replace(S(9), ".", ",") 'Zahl 
40.
    Aus = Aus & Delim & Replace(S(10), ".", ",") 'Zahl 
41.
    Aus = Aus & Delim & S(11) 'Text 
42.
    ' ... 
43.
	 
44.
    'Fertige Ausgabezeile dem neuen Dateiinhalt nach einer Zeilenschaltung hinzufügen 
45.
    Neu = Neu & vbCrLf & Aus 
46.
Next 
47.
 
48.
'Neuen Dateiinhalt in alte Datei schreiben (diese dazu neu erstellen) 
49.
'(Da sich am Beginn von "Neu" eine Zeilenschaltung, bestehend aus den 2 Zeichen CR und LF, befindet, 
50.
'Inhalt erst ab dem dritten Zeichen verwenden) 
51.
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 ; ich dachte, wir sollten einem neuen Mitglied etwas mehr bieten ... [/Edit]
Bitte warten ..
Mitglied: 76109
05.03.2010 um 17:30 Uhr
Hallo bastla!

Wow, 4 Sekunden zu langsam

Gruß Dieter

PS Und gleich wieder das volle Programm
Bitte warten ..
Mitglied: bastla
05.03.2010 um 17:32 Uhr
@76109
[OT]
Wow, 4 Sekunden zu langsam
Sowohl mit den 4 Sekunden, als auch mit der Tatsache, dass Du schneller warst, kann ich gut leben ...
[/OT]

Grüße
bastla
Bitte warten ..
Mitglied: 76109
05.03.2010 um 17:37 Uhr
@bastla
[OT]
Zitat von bastla:
Sowohl mit den 4 Sekunden, als auch mit der Tatsache, dass Du schneller warst, kann ich gut leben ...
Daran hege ich keine Zweifel
[/OT]

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Powershell - In Textdatei suchen und ersetzen

Frage von Raaja89 zum Thema Batch & Shell ...

Windows Server
Große Dateien mit externen Partnern bearbeiten (4)

Frage von Matsushita zum Thema Windows Server ...

Grafik
Notebook zum Fotos bearbeiten (10)

Frage von KodaCH zum Thema Grafik ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...