VBS - Zeilen aus Textdatei auslesen (regelm. Reihenfolge)
Hallo,
wiedereinmal wird Hilfe benötigt und ich darf mich schon im voraus dafür bedanken.
Wie kann ich aus einer simplen Textdatei immer eine bestimmte Anzahl Zeilen auslesen und in eine neue Datei schreiben ?
In der Beispieldatei wären dies die Zeilen 3, 5, 8, 10, 13, 15 ... also im Wechsel 1 bzw. 2 Leerzeilen dazwischen, beginnend ab Zeile 3.
Ich freue mich auf Antwprten
Micha
wiedereinmal wird Hilfe benötigt und ich darf mich schon im voraus dafür bedanken.
Wie kann ich aus einer simplen Textdatei immer eine bestimmte Anzahl Zeilen auslesen und in eine neue Datei schreiben ?
In der Beispieldatei wären dies die Zeilen 3, 5, 8, 10, 13, 15 ... also im Wechsel 1 bzw. 2 Leerzeilen dazwischen, beginnend ab Zeile 3.
August
31
Zeile 3
blabla 4
Zeile 5
blablabla 6
30
Zeile 8
blablabla 9
Zeile 10
Blabla 11
29
Zeile 13
blabla 14
Zeile 15
blabla 16
28
...
Ich freue mich auf Antwprten
Micha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 221316
Url: https://administrator.de/contentid/221316
Ausgedruckt am: 24.11.2024 um 20:11 Uhr
10 Kommentare
Neuester Kommentar
Moin Gurkenhobel,
ein VBSkript geht mir ja nicht so flott wie ein Batch-Einzeiler.
Deshalb poste ich diesen - der Algorithmus lässt sich sicherlich auch als VBS umsetzen.
Deinen Beispieltext oben würde ich bei mir am CMD (wo DelayedExpansion per HKCU-Eintrag immer aktiviert ist) so abfackeln:
"biber$" ist mein Prompt, der Oneliner geht also mit "@(for...." los
Bedeutet:
Grüße
Biber
ein VBSkript geht mir ja nicht so flott wie ein Batch-Einzeiler.
Deshalb poste ich diesen - der Algorithmus lässt sich sicherlich auch als VBS umsetzen.
Deinen Beispieltext oben würde ich bei mir am CMD (wo DelayedExpansion per HKCU-Eintrag immer aktiviert ist) so abfackeln:
biber$@(for /f "delims=: tokens=1,*" %a in ('findstr /n $ beispieltext.txt') do @(set /a x=%a %10)>nul & @(for %i in (0 3 5 8) do @if !x!==%i @echo %b)
Zeile 3
Zeile 5
Zeile 8
Zeile 10
Zeile 13
Zeile 15
Bedeutet:
- Ich lasse per "Findstr /n $" alle Zeilen von Beispieltext.txt mit Zeilennummer ausgeben
- wenn die Zeilennummer MOD 10 gleich 0, 3, 5 oder 8 ist, dann gebe ich es aus
- fertig
Grüße
Biber
Hallo Gurkenhobel,
wie Biber schon bemerkt hat, geht das mit Batch mit viel weniger Zeilen.
Aber da du nach VBS gefragt hast, hier ein Beispiel:
In der 5ten Zeile müsstest du eventuell deine Zeilennummern anpassen (Achtung! fängt mit NULL an zu zählen).
Gruss
Tsuki
wie Biber schon bemerkt hat, geht das mit Batch mit viel weniger Zeilen.
Aber da du nach VBS gefragt hast, hier ein Beispiel:
Set FSO = CreateObject("Scripting.FileSystemObject")
AlleZeilen = Split(FSO.OpenTextFile("Zeilen.txt",1).ReadAll,vbcrlf)
For i = 0 to Ubound(AlleZeilen) - 1
a = i mod(10)
if a = 2 or a = 4 or a = 7 or a = 9 then
ZeilenEinzel = ZeilenEinzel & AlleZeilen(i) & vbcrlf
end if
Next
FSO.CreateTextFile("Zeilen-gefiltert.txt",true).Write (ZeilenEinzel)
In der 5ten Zeile müsstest du eventuell deine Zeilennummern anpassen (Achtung! fängt mit NULL an zu zählen).
Gruss
Tsuki
Moin Gurkenhobel,
meine Batch-CMD-Zeile war ja nur gedacht als proof of concept für den - ich nenne es mal übertrieben "Algorithmus".
Als Batch, den du auch ohne spezielle Registry-Änderungen bei dir ausführen kannsr, sähe der (ungetestet) so aus:
Und nein, ich muss nicht jede Zeile einzeln angeben nach dem Muster ". for %i in (0 3 5 8 10 13 15 18 20 ..) ".
Grüße
Biber
meine Batch-CMD-Zeile war ja nur gedacht als proof of concept für den - ich nenne es mal übertrieben "Algorithmus".
Als Batch, den du auch ohne spezielle Registry-Änderungen bei dir ausführen kannsr, sähe der (ungetestet) so aus:
@echo off & setlocal EnableDelayedExpansion
for /f "delims=: tokens=1,*" %%a in ('findstr /n $ beispieltext.txt') do (
set /a x=%%a %% 10 >nul
for %%i in (0 3 5 8) do if !x!==%%i echo %%b
)
Und nein, ich muss nicht jede Zeile einzeln angeben nach dem Muster ". for %i in (0 3 5 8 10 13 15 18 20 ..) ".
Grüße
Biber
Moin Gurkenhobel,
zwei von vielen Möglichkeiten:
a) wenn du die Batchdatei von einem CMD-Prompt aufrufst (also bespielsweise
, um das Ergebnis in eine Datei umzuleiten. Hat den Vorteil, dass du beim Aufruf ohne zusätzlichen Parameter erst mal das Ergebnis auf dem Monitor anschauen kannst und erst dann in einem zweiten Schritt das Ergebnis festschreibst.
b) wenn du ohne Parameter arbeiten willst und das Ziel immer in eine Datei "D:\temp\GefilterterExport.Txt" geschrieben werden soll, dann füge als neue Zeile 2 ein
"
Auch diesmal wieder ungetestet.
Grüße
Biber
zwei von vielen Möglichkeiten:
a) wenn du die Batchdatei von einem CMD-Prompt aufrufst (also bespielsweise
"FilterText"
eingibst, weil die Datei bei dir Filtertext.cmd
heisst und im aktuellen Verzeichnis liegt) und dort die Ausgabe so aussieht, wie du sie in ein einer Datei haben willst: dann gib einFilterText>d:\temp\GefilterterExport.txt
, um das Ergebnis in eine Datei umzuleiten. Hat den Vorteil, dass du beim Aufruf ohne zusätzlichen Parameter erst mal das Ergebnis auf dem Monitor anschauen kannst und erst dann in einem zweiten Schritt das Ergebnis festschreibst.
b) wenn du ohne Parameter arbeiten willst und das Ziel immer in eine Datei "D:\temp\GefilterterExport.Txt" geschrieben werden soll, dann füge als neue Zeile 2 ein
"
>D:\temp\GefilterterExport.Txt (
" und hänge in der letzten Zeile eine Klammer-Zu an::: --- abspeichern als Plaintext mit Endung .bat./cmd
@echo off & setlocal EnableDelayedExpansion
>D:\temp\GefilterterExport.Txt (
for /f "delims=: tokens=1,*" %%a in ('findstr /n $ beispieltext.txt') do (
set /a x=%%a %% 10 >nul
for %%i in (0 3 5 8) do if !x!==%%i echo %%b
))
Auch diesmal wieder ungetestet.
Grüße
Biber