Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: qwaxxy

qwaxxy (Level 1) - Jetzt verbinden

05.03.2010, aktualisiert 11:49 Uhr, 11402 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 ..
Ähnliche Inhalte
Visual Studio

Textdatei einlesen und per VBScript umformatieren

gelöst Frage von MaiwaldVisual Studio12 Kommentare

Hallo Forummitglieder, Ich bräuchte einen Ansatz für ein VB Script IST: Ich habe eine Datei, die folgenden Inhalt hat ...

VB for Applications

VbScript: Textdatei nach Suchbegriff nur die nächsten drei Zeilen ausgeben

gelöst Frage von Host-essVB for Applications10 Kommentare

Moin, Moin, ich bin neu hier im Forum und auch Neuling was Vbscript betrifft. Vielleicht kann mir ja jemand ...

Batch & Shell

Neueste oder mit höchster fortlaufender Zahl am Dateiende mit gleichem Anfang aus Textdatei kopieren

gelöst Frage von lanazyBatch & Shell2 Kommentare

Hallo zusammen, wir müssen bestimmte Dateien per Script kopieren. Welche Dateien das sind, kommen aus einer Textdatei, die wir ...

Microsoft Office

Outlook VBScript

gelöst Frage von NebellichtMicrosoft Office5 Kommentare

Hallo, seit ein paar Wochen werden keine VBScripte hinter den (Benutzerspezifschen) Outlook Formularen ausgeführt. Hat jemand eine Lösung parat ...

Neue Wissensbeiträge
Router & Routing
Der "768k-Day" kommt
Information von LordGurke vor 1 StundeRouter & Routing1 Kommentar

Für Leute, die Router mit BGP-Fulltable betreiben vielleicht ein interessanter Hinweis: Die IPv4-Fulltable erreicht voraussichtlich innerhalb der nächsten 2-3 ...

Debian

Partition angeblich voll, dabei aber noch nicht mal zur Hälfte belegt

Anleitung von diemilz vor 4 StundenDebian7 Kommentare

Hallo zusammen, ich habe ein kleines Problem: Ich habe auf einem physischen Debian Linux Server als ZoneMinder-Server (HP ProLiant ...

Windows 7
Updategängelung auf Windows 10, die zweite
Information von Penny.Cilin vor 4 TagenWindows 72 Kommentare

Hallo, da Windows 7 im kommenden Jahr nicht mehr supportet wird, werden Nutzer von Window 7 home premium wieder ...

Internet
EU-Urheberrechtsreform: Zusammenfassung
Information von Frank vor 7 TagenInternet1 Kommentar

Auf golem.de gibt es eine Analyse von Friedhelm Greis, der das Thema EU-Urheberrechtsreform gut und strukturiert zusammenfasst. Zwar haben ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Notebooks in Firmenwlan authentifizieren
gelöst Frage von EarthShakerLAN, WAN, Wireless17 Kommentare

Guten Tag, unsere Firma möchte gerne flächendeckend WLAN einführen und hat zu diesem Zweck einen Dienstleister beauftragt. Wir benötigen ...

Backup
Veeam Community Edition
Frage von dgrebnerBackup15 Kommentare

Hallo Zusammen, kann jemand seine praktischen Erfahrungswerte mit der Veeam-Community Edition mit mir teilen? Es gab dazu ja schon ...

Peripheriegeräte
PS2 Y-Kabel für Maus+Tastatur an PS2 Combo-Anschluss ASUS Prime X370-A
gelöst Frage von Windows10GegnerPeripheriegeräte13 Kommentare

Hallo, ich bin am Überlegen das o.g. Motherboard anzuschaffen. Da ich aber noch PS/2 für Maus+Tastatur benötige (bei optischen ...

Netzwerkmanagement
Netzwerk vorübergehend weg
Frage von ahstaxNetzwerkmanagement11 Kommentare

Hallo, folgendes Szenario stellt sich dar: Im Netzwerk mit Win7-PCs wurden Switche ausgetauscht. Grundsätzlich funktioniert alles mindestens so gut ...