Vbscript Textfile auslesen Zeilen zählen und Werte austauschen

Mitglied: u0206084

u0206084 (Level 1) - Jetzt verbinden

24.11.2011 um 10:52 Uhr, 7407 Aufrufe, 17 Kommentare

Hallo Kollegen

Ich bin daran über eine Batch mehrere *.csv Dateien in einem Ordner zu einer neu.csv zusammenzuführen. Dabei ermittle ich noch die Zeilenanzahl der neu.csv und möchte nun diesen ermittelten Wert der Zeilenanzahl in der ersten Zeile der neu.csv eintragen bzw. einen bereits hinterlegten wert mit meinem ermittelten Wert austauschen. Hier ist genau der Knackpunkt dies bekomme ich per Batch nicht hin.

Wie könnte ich dies mit vbscript realisieren ?

Nachfolgend der Code der bisher erstellt wurde.

setlocal
set "Ordner=c:\test"
REM Zusamenfuehren der CSV Dateien
set "Sammel=c:\test1\DeineSammeldatei.csv"
pushd "%Ordner%"
if exist "%Sammel%" del "%Sammel%"
for %%i in (*.txt) do if not exist "%Sammel%" for /f "usebackq delims=" %%z in ("%%i") do if not exist "%Sammel%" echo %%z>"%Sammel%"
for %%i in (*.txt) do more +1 "%%i">>"%Sammel%"
popd


REM zählen der Zeilen der Zusammengefuehrten CSV
Set /A "Counter=0"
FOR /F "delims=" %%A IN (c:\test1\Deine.csv) DO SET /A "Counter+=1"
Set /A "Counter-=1"
echo %Counter% Zeilen
echo 'Anzahl Zeilen: ' . count ($zeilen)
Pause
Mitglied: Skyemugen
24.11.2011 um 11:00 Uhr
Aloha,

irgendwie machen mich so einige Dinge heute konfus aber um eine bessere Übersicht zu bekommen, wäre es von Vorteil, wenn du denen bisherigen Code in <code></code>-Formatierung setzt und wenn ich jetzt noch einmal genau entwuselt habe, welchen Wert du wo jetzt austauschen willst, will ich meinen, dass das dennoch mit Batch realisierbar ist ;-) face-wink
aber plainskript schaue ich mir prinzipiell nicht mehr an, da schaltet mein Gehirn in den read-only-mode

greetz André

edit: @bastla, läuft auf dasselbe hinaus ;-) face-wink read-only bedeutet ja, dass keine Verarbeitung stattfindet, ergo ist es wie es nicht gelesen zu haben
Bitte warten ..
Mitglied: bastla
24.11.2011 um 11:02 Uhr
Hallo u0206084!

Du kannst nicht eine bestehende Datei editieren (auch nicht mit VBScript), sondern nur die Datei neu erstellen - daher etwa per:
Grüße
bastla

P.S.: Da ja in einer CSV keine Leerzeilen zu erwarten (bzw im Fall des Falles vermutlich nicht zu zählen) sind, spare ich mir den Tipp, das Zeilenzählen per findstr /n "^" vorzunehmen ... ;-) face-wink

[Edit] @skye: ... und ich hatte gedacht in den ignore-completely-mode ... ;-) face-wink [/Edit]

[Edit2] @skye
read-only bedeutet ja, dass keine Verarbeitung stattfindet
Das bezieht sich jetzt aber nicht auf die Leser gewisser Zeitungen, nehme ich an ... ;-) face-wink
[/Edit2]
Bitte warten ..
Mitglied: u0206084
24.11.2011 um 13:05 Uhr
Hallo Andre

Versuche es mal ein wenig genauer zu erklären.

Es gibt ein Ordner nenne Ihn mal c:\Ablage\*.csv.
In diesem Ordner werden *.csv Dateien abgelegt (unbestimmte Anzahl)

Auszug aus dieser Datei:

15517482;53;09.11.2011;2011
449000;K;00;0000;512,92;790004;K;000;0000;512,92;OKT11 HHM EMM;
449100;K;00;0000;1009,86;790004;K;000;0000;1009,86;OKT11 HHM EMM;
449200;K;00;0000;57;790004;K;000;0000;57;OKT11 HHM EMM;
450000;K;00;0000;301962,49;790004;K;000;0000;301962,49;OKT11 HHM EMM;

!!Die erste Zeile ist sozusagen die Überschrift --> 15517482;53;09.11.2011;2011

Ich möchte jetzt die *.csv Dateien im im Verzeichnis c:\Ablage\ vorhanden sind in einer Datei neu.csv zusammenführen.
Hierbei sollte dann die Überschrift entfernt werden und durch die Gesamtanzahl an Zeilen der zusammengeführten *.csv Dateien anstatt der Überschrifft eingefügt werden.

Das zusammenführen habe ich hin bekommen so wie oben abgebildet zusätzlich habe ich ermitteln können wie viele Zeilen die neue *.CSV hat . !!

Jedoch konnte ich es noch nicht ermöglichen die überschrift durch die ermittelte Gesamtanzahl an Zeilen zu ersetzen.
Denke das wird mit Batch gar nicht zu realisieren sein.

Fall die in VBS besser zu realisieren ist wäre ich über etwas Unterstüzung sehr dankbar.
Ich hoffe ich konnte dies ein wenig besser erläutern wie zuvor.

Dank
Bitte warten ..
Mitglied: pieh-ejdsch
24.11.2011 um 14:42 Uhr
moin,

erstma Sammlen hmmm
set /a counter = 0
set /a counter - = 1
was soll denn erst diese Aufrechnerei der ersten Zeile, wenn diese am Ende Ersetzt bzw nicht mitgezählt wird (gleich bei -1 Anfangen oder ...)

mit etwas weniger Produktivzeilen würde der Batch so reichen (wenn die Letze Zeile nur eine Zeilenschaltung hat bzw nur ein CR)
Gruß Phil
Bitte warten ..
Mitglied: u0206084
24.11.2011 um 22:27 Uhr
Hallo Phil

super vielen Dank schein zu funktionieren, jetzt muss ich mich nur noch damit beschäftigen was all das genau bedeutet was du in deiner Batch geschrieben hast.

Vielen Dank noch mal für deine Hilfe.

Gruß Martin
Bitte warten ..
Mitglied: bastla
24.11.2011 um 22:43 Uhr
Hallo u0206084!
was all das genau bedeutet
Vielleicht wird's ja etwas deutlicher, wenn Du einfach nur
verwendest ...

Zur Zeile 3 hätten wir übrigens sogar das passende Tutorial im Angebot ...

Grüße
bastla
Bitte warten ..
Mitglied: u0206084
25.11.2011 um 08:30 Uhr
Hallo Phil,

vielen Dank für dein bisherige Hilfe.

Ich hätte da noch eine Frage, vielleicht fällt dir auch dazu was ein.

Ist es auch möglich den ermittelten Wert der Zeilenanzahl in der Überschrift auszutauschen ?

15517482;53;09.11.2011;2011

An der Position nach dem ersten Semicolon in der ersten Zeile hier steht momentan die 53 anstatt die 53 sollte der ermittelte Wert der Zeilenanzahl stehen.

Die Überschrift soll also genau so bleiben wie sie war jedoch nur durch den Austausch der beschriebenen Position.

Da es sich um mehre csv Dateien handelt und jede eine Überschrift hat, jedoch sich diese nur durch die Zeilenanzahl (pos2 der Überschrift) unterscheidet muss lediglich von allen zusammengeführten Dateien nur eine Überschrift behalten werden und die Zeilenanzahl auf der beschriebenen Position mit dem Aktuellen Wert (Zeilenanzahl ) in der Sammel.csv aktualisiert werden.

Vielen Dank für deine Unterstützung
Bitte warten ..
Mitglied: pieh-ejdsch
25.11.2011 um 14:37 Uhr
moin Martin,

sorry - das PopD war mir durch die Lappen gegangen
Ungetestet vllt etwa so

[Edit]
SET aus der FOR mit Verkettung entfernt
[]Edit]

Gruß Phil
Bitte warten ..
Mitglied: u0206084
25.11.2011 um 15:46 Uhr
Hallo Phil

leider funktioniert dies nicht

Meldung

"set" ist syntaktisch an dieser stelle nicht verarbeitbar


Ergebnisdatei sammel.csv wird erstellt. (Auszug siehe unten)

0
449000 K 0 0 512,92 790004 K 0 0 512,92 OKT11 HHM EMM
449100 K 0 0 1009,86 790004 K 0 0 1009,86 OKT11 HHM EMM
449200 K 0 0 57 790004 K 0 0 57 OKT11 HHM EMM


Danke
Bitte warten ..
Mitglied: pieh-ejdsch
25.11.2011 um 22:30 Uhr
Ähm ja da Verträgt sich eine Eingabe mit einer Befehlsverkettung (vom FIND) nicht.
Lässt sich also doch nur setperat nutzen.

Ich habs Oben berichtigt.

Gruß Phil
Bitte warten ..
Mitglied: u0206084
28.11.2011 um 08:26 Uhr
Hallo Phil,

das Script funktioniert so weit, jedoch stimmt die Zeilenanzahl nicht

Hier im Test hatte ich 4 textdateien mit jeweils 4 Zeilen (ink. Überschrift)

das Ergebnis war dies

15517482 21 09.11.2011 2011
449000 K 0 0 512,92 790004 K 0 0 512,92 OKT11 HHM EMM
449000 K 0 0 512,92 790004 K 0 0 512,92 OKT11 HHM EMM
449100 K 0 0 1009,86 790004 K 0 0 1009,86 OKT11 HHM EMM
431000 K 0 0 3735,54 790004 K 0 0 3735,54 JUL11 HM EMM
431100 K 0 0 2311,01 790004 K 0 0 2311,01 JUL11 HM EMM
431200 K 0 0 2836,1 790004 K 0 0 2836,1 JUL11 HM EMM

563000 K 0 0 56324,6 790004 K 0 0 56324,6 JUL11 HKP EMM
563100 K 0 0 18929,14 790004 K 0 0 18929,14 JUL11 HKP EMM
563200 K 0 0 53428,35 790004 K 0 0 53428,35 JUL11 HKP EMM
400000 P 0 0 18770,4 790004 K 0 0 18770,4 JUL11 PV EMM
401000 P 0 0 25447,61 790004 K 0 0 25447,61 JUL11 PV EMM
402000 P 0 0 20168,44 790004 K 0 0 20168,44 JUL11 PV EMM


Also 21

von den 4 Textdateien darf ja im neuen Sammel.csv nur eine angezeigt werden mit den aktuellen Zeilen.
Hier muss irgendwo noch falsch gezählt werden.

Aber bis hier hin passt schon mal.

Fall du noch Zeit hast kannst ja nochmal darüber schauen.

Danke für deine Mühe.
Bitte warten ..
Mitglied: pieh-ejdsch
28.11.2011 um 15:24 Uhr
moin,

hach - jetzt weis ich warum ich erst das @drinhatte
in Zeile 04 fehlt das @ vor dem more - für das Ausblenden eines Befehles um diesen selbst nicht anzuzeigen. Obwohl echo OFF ist wird der Befehl ohne das Geführte @ als Zeile gezählt. Das wiederum nur weil die Befehle aus der For Anweisung stammen und die nachfolgenden Verketteten Befehle Eingaben; Ausgaben sowie Handle 3 verarbeiten.

in der CMD-Line
das wären die 8 zuvielen Zeilen.

wenn die 9. zuviele Zeile wegsoll musst Du die Leerzeilen der Dateien entfernen
Gruß Phil
Bitte warten ..
Mitglied: u0206084
28.11.2011 um 21:03 Uhr
Hallo Phil

ich probiere es mal aus danke für deine Hilfe.
Ist es denn auch möglich automatisiert leerzeilen zu löschen falls vorhanden ?

Gruß Martin
Bitte warten ..
Mitglied: u0206084
29.11.2011 um 08:03 Uhr
Hallo Phil,

habe deine Anmerkung mit der Leerzeile übersehen. An was für einer Position im Script muss ich diese den genau platzieren.

Gruß Martin
Bitte warten ..
Mitglied: u0206084
29.11.2011 um 08:08 Uhr
Hallo Phil

hier das Ergebnis nach der Anpassung des @

15517482 13 09.11.2011 2011
449000 K 0 0 512,92 790004 K 0 0 512,92 OKT11 HHM EMM
449000 K 0 0 512,92 790004 K 0 0 512,92 OKT11 HHM EMM
449100 K 0 0 1009,86 790004 K 0 0 1009,86 OKT11 HHM EMM
431000 K 0 0 3735,54 790004 K 0 0 3735,54 JUL11 HM EMM
431100 K 0 0 2311,01 790004 K 0 0 2311,01 JUL11 HM EMM
431200 K 0 0 2836,1 790004 K 0 0 2836,1 JUL11 HM EMM

563000 K 0 0 56324,6 790004 K 0 0 56324,6 JUL11 HKP EMM
563100 K 0 0 18929,14 790004 K 0 0 18929,14 JUL11 HKP EMM
563200 K 0 0 53428,35 790004 K 0 0 53428,35 JUL11 HKP EMM
400000 P 0 0 18770,4 790004 K 0 0 18770,4 JUL11 PV EMM
401000 P 0 0 25447,61 790004 K 0 0 25447,61 JUL11 PV EMM
402000 P 0 0 20168,44 790004 K 0 0 20168,44 JUL11 PV EMM


Die leerzeile müsste ich noch weg haben, und dann die Zahl Zeilen um diese Leerzeile subtrahieren, bzw. gar nicht mit zählen.


Gruß Martin
Bitte warten ..
Mitglied: pieh-ejdsch
29.11.2011 um 11:41 Uhr
moin Martin,

mit dem Batch im Editor drückst Du [strg]+H
in die obere Zeile kommt:
in die untere Zeile kommt:
-> (Alle Ersetzen)

speichern ... Fertig - somit wird richtig Gezählt und Richtig erstellt.

Gruß Phil
Bitte warten ..
Mitglied: u0206084
29.11.2011 um 12:05 Uhr
Hallo Phil,

super vielen Dank funktioniert.

Danke dir für deine Geduld :-) face-smile Progammieren ist leider nicht so meine Leidenschaft.

Versuche mich jedoch Stück für Stück darin einzuarbeiten.

Also Danke nochmals für deine tolle unterstützung.
Bitte warten ..
Heiß diskutierte Inhalte
Microsoft
Mitteilung an alle bei Störungen in der IT
gelöst David.B2D45Vor 17 StundenFrageMicrosoft31 Kommentare

Hallo Forum, ich bin auf der Suche nach einem Programm / Tool mit dem ich Text (Laufschrift) auf allen (gewünschten) PC's / Benutzer im ...

LAN, WAN, Wireless
"Ethernet verfügt über keine gültige IP-Konfiguration"
gelöst archITVor 1 TagFrageLAN, WAN, Wireless18 Kommentare

Moin, folgendes Problem: Jedes mal, wenn ich meinen PC an mache, muss ich die Problembehandlung auf der Ethernet schnittstelle ausführen, dass ich Internet habe. ...

Microsoft
PDF editor mit spezieller exportfunktion
FlorianHeVor 1 TagFrageMicrosoft10 Kommentare

Hi leute. Ich habe eine Frage. Bei uns in der Instandhaltung kommt es oft vor das wir änderungen an den Elektrischen Anlagen oder Mechanichen ...

TK-Netze & Geräte
Umstellung von ISDN auf VoIP, 4 Sprachkanäle über 2 DSL-Anschlüsse
Gohla2019Vor 1 TagFrageTK-Netze & Geräte14 Kommentare

Hallo, ich brauche einmal etwas Hilfestellung bei einer geplanten Umstellung einer Telefon-Installation von ISDN-Technik auf VoIP. Vor Ort gibt es zurzeit 2 ISDN-Leitungen, so ...

Backup
Ich suche ein cloudbasiertes Backup für Linux-Web-Server mit zentraler Verwaltung und Deduplizierung
EDVMan27Vor 1 TagFrageBackup4 Kommentare

Hallo, ich suche für eine handvoll Web-Server eine 2. Datensicherung. Die Server sind gemischt, meist aber Ubuntu. Ich habe über Vollzugriff per SSH als ...

Exchange Server
Exchange-Server als Cloud-Lösung sinnvoll?
imebroVor 1 TagFrageExchange Server9 Kommentare

Hallo an Alle. Unser IT-Dienstleister hat uns vorgeschlagen, den gesamten Emailserver in die Cloud zu verlegen, sodass die Administration des Exchange-Servers wegfällt. Unsere Zertifikatsverwaltung ...

E-Mail
Kann man mit SPF Mails für eine Domäne vollständig verbieten?
gelöst StefanKittelVor 5 StundenFrageE-Mail17 Kommentare

Hallo, viele Firmen haben ja zusätzliche Domänen. Als Web- und oder Mail-weiterleitung. Es werden also niemals Emails damit gesendet werden. kann man mit einem ...

Sicherheit
Passwort Safe (Cloud) mit Siegel Funktion
CriemoVor 1 TagFrageSicherheit3 Kommentare

Hallo Zusammen, ich habe da mal eine Frage an Euch. Ich benötige einen Cloud based Passwort Safe der die Möglichkeit hat gewisse Passwörter nur ...