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
GELÖST

Vbscript Textfile auslesen Zeilen zählen und Werte austauschen

Frage Entwicklung Batch & Shell

Mitglied: u0206084

u0206084 (Level 1) - Jetzt verbinden

24.11.2011 um 10:52 Uhr, 6193 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
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 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:
01.
move "%Sammel%" %temp%\Sammel.txt 
02.
 >"%Sammel%" echo 'Anzahl Zeilen: ' . count (%Counter%) 
03.
>>"%Sammel%" type %temp%\Sammel.txt
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 ...

[Edit] @skye: ... und ich hatte gedacht in den ignore-completely-mode ... [/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 ...
[/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)
01.
@echo off 
02.
 
03.
pushD "C:\test" 
04.
 
05.
>"D:\Sammel.csv" ( 
06.
	<nul set/p="Anzahl Zeilen: " 
07.
08.
		for %%i in (*.txt) do @more +1 "%%i"|findstr /v /r /c:"^[	 ]*$" 
09.
	)|find /c /v "" 
10.
	for %%i in (*.txt) do @more +1 "%%i"|findstr /v /r /c:"^[	 ]*$" 
11.
)
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
01.
@echo off 
02.
>"D:\Sammel.csv" ( 
03.
    <nul set/p="Anzahl Zeilen: " 
04.
05.
        for %%i in ("C:\test\*.txt") do @more +1 "%%i" 
06.
    )|find /c /v "" 
07.
    for %%i in ("C:\test\*.txt") do @more +1 "%%i" 
08.
)
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

01.
@echo off &setlocal 
02.
 
03.
for %%i in ("C:\test\*.txt") do if not defined line1 <"%%i" set /p line1= 
04.
(for %%i in ("C:\test\*.txt") do more +1 "%%i" )|find /c /v "">"%Temp%\csv" 
05.
<"%temp%\csv" set /p "lines=" 
06.
 
07.
>"D:\Sammel.csv" ( 
08.
 for /f "tokens=1-3*delims=;" %%i in ("%lines%;%line1%") do echo %%j;%%i;%%l 
09.
 for %%i in ("C:\test\*.txt") do more +1 "%%i" 
10.
)
[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
01.
>echo off 
02.
for /l %i in (1 1 4) do echo abc 
03.
abc 
04.
abc 
05.
abc 
06.
abc 
07.
 
08.
(for /l %i in (1 1 4) do echo abc)|findstr /n  "^" 
09.
1: 
10.
2:>echo abc 
11.
3:abc 
12.
4: 
13.
5:>echo abc 
14.
6:abc 
15.
7: 
16.
8:>echo abc 
17.
9:abc 
18.
10: 
19.
11:>echo abc 
20.
12:abc 
21.
 
22.
(for /l %i in (1 1 4) do >nul echo abc)|findstr /n  "^" 
23.
1: 
24.
2:>echo abc   1>nul 
25.
3: 
26.
4:>echo abc   1>nul 
27.
5: 
28.
6:>echo abc   1>nul 
29.
7: 
30.
8:>echo abc   1>nul 
31.
 
32.
(for /l %i in (1 1 4) do @echo abc)|findstr /n  "^" 
33.
1:abc 
34.
2:abc 
35.
3:abc 
36.
4:abc
das wären die 8 zuvielen Zeilen.

wenn die 9. zuviele Zeile wegsoll musst Du die Leerzeilen der Dateien entfernen
01.
  for %%i in (*.txt) do @more +1 "%%i"|findstr /v /r /c:"^[	 ]*$" 
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:
more +1 "%%i"
in die untere Zeile kommt:
more +1 "%%i"|findstr /v /r /c:"^[	 ]*$"
-> (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 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
gelöst Mit batch zeilen auslesen (2)

Frage von keksegriller zum Thema Batch & Shell ...

Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

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 ...