Leerzeichen am Anfang einer Zeiler einer Textdatei per Batch-Datei. Wie geht das?
Hallo zusammen,
als allererstes möchte ich ein Lob für dieses geniale Forum abgeben. Das ist heute mein erster Beitrag und ich hoffe das mir vielleicht jemand helfen kann.
Es geht um folgendes:
Ich habe eine Textdatei mit ca. 10000 Zeilen und möchte am Anfang jeder Zeile ein einfaches Leerzeichen setzen.
Wie kann ich das per Batchdatei lösen?
Wäre super, wenn mir da jemand helfen könnte.
Vielen Dank
als allererstes möchte ich ein Lob für dieses geniale Forum abgeben. Das ist heute mein erster Beitrag und ich hoffe das mir vielleicht jemand helfen kann.
Es geht um folgendes:
Ich habe eine Textdatei mit ca. 10000 Zeilen und möchte am Anfang jeder Zeile ein einfaches Leerzeichen setzen.
Wie kann ich das per Batchdatei lösen?
Wäre super, wenn mir da jemand helfen könnte.
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 132534
Url: https://administrator.de/contentid/132534
Ausgedruckt am: 26.11.2024 um 04:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo mamahuana,
eigentlich gar nicht so schwer. Grundsätzlich etwa so
ABER
So wie es jetzt ist werden Leerzeilen übergangen, <>|& und % im Text führen zu Fehlern.
Gib mal etwas mehr Info zum Inhalt der Datei.
Grüße
rubberman
eigentlich gar nicht so schwer. Grundsätzlich etwa so
@echo off &setlocal
set Quelle=abc.txt
set Ziel=xyz.txt
for /f "usebackq delims=" %%i in ("%Qelle") do >>"%Ziel%" echo %%i
ABER
So wie es jetzt ist werden Leerzeilen übergangen, <>|& und % im Text führen zu Fehlern.
Gib mal etwas mehr Info zum Inhalt der Datei.
Grüße
rubberman
Moin mamahuana,
willkommen im Forum.
Nicht, dass ich jemand den Spass am Skripten nehmen will, aber...
?? Ist es denn wirklich nötig, dieses führende Leerzeichen (mit Informationsgehalt Null) in eine Kopie der 10000-Zeilendatei zu schreiben??
Wenn es so stumpf wie geschildert einfach als jedes erstes Zeichen der Zeile auftauchen soll, dann kann doch ebensogut das "einlesende" Programm sich ein Leerzeichen dazudenken, oder?
Wie sieht denn dein eigentlicher Verarbeitungsprozess aus?
Grüße
Biber
willkommen im Forum.
Nicht, dass ich jemand den Spass am Skripten nehmen will, aber...
?? Ist es denn wirklich nötig, dieses führende Leerzeichen (mit Informationsgehalt Null) in eine Kopie der 10000-Zeilendatei zu schreiben??
Wenn es so stumpf wie geschildert einfach als jedes erstes Zeichen der Zeile auftauchen soll, dann kann doch ebensogut das "einlesende" Programm sich ein Leerzeichen dazudenken, oder?
Wie sieht denn dein eigentlicher Verarbeitungsprozess aus?
Grüße
Biber
Hallo mamhuana und auch von mir ein Willkommen!
Ohne Bibers edukative Bemühungen unterlaufen zu wollen (und tatsächlich nur aus Freude am Scripten ):
Achtung: Es wird (ohne Erstellung einer Sicherungskopie) unmittelbar die Datei verändert!
Grüße
bastla
Ohne Bibers edukative Bemühungen unterlaufen zu wollen (und tatsächlich nur aus Freude am Scripten ):
@echo off & setlocal
set "Datei=D:\Test.txt"
set "IB=%temp%\InsertBlank.vbs"
> %IB% echo D=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject")
>>%IB% echo T=fso.OpenTextFile(D).ReadAll:fso.CreateTextFile(D).Write " "^&Replace(T,vbCrLF,vbCrLf^&" ")
cscript //nologo %IB% "%Datei%"
Grüße
bastla
Moin bastla,
diese Idee (mit VbSkript, .ReadAll und Replace alle CRLFs durch CRLF+Space) direkt in der Originaldatei zu erstzen hatte ich auch.
Ich habe es allerdings sofort wieder verworfen, weil ich dachte, ich hätte
Wie gehst du mit diesen Detailproblemen um?
Außerdem... das sind doch keine edukativen Bemühungen.
Ich denke nur an die armen Bätche - die haben doch auch Gefühle und machen viel lieber etwas Sinnvolles als 10000 Zeilen um ein leading blank aufzublasen.
Grüße
Biber
diese Idee (mit VbSkript, .ReadAll und Replace alle CRLFs durch CRLF+Space) direkt in der Originaldatei zu erstzen hatte ich auch.
Ich habe es allerdings sofort wieder verworfen, weil ich dachte, ich hätte
- ein Leerzeichen zuwenig in der ersten Zeile
- dafür nach dem letzten Zeilenende ein Leerzeichen zuviel und damit eine Zeile mehr (die nicht mit CRLF endet)
Wie gehst du mit diesen Detailproblemen um?
Außerdem... das sind doch keine edukativen Bemühungen.
Ich denke nur an die armen Bätche - die haben doch auch Gefühle und machen viel lieber etwas Sinnvolles als 10000 Zeilen um ein leading blank aufzublasen.
Grüße
Biber
Hallo Biber,
Wie groß darf ein Array sein?
An bastlas Code anknüpfend.
Beim Schreiben vor jede Zeile ein Space zu setzen sollte dann nicht das Problem sein.
Allerdings hast du mit dem Sinn oder Unsinn dieser Aktion schon Recht
Grüße
rubberman
Wie groß darf ein Array sein?
An bastlas Code anknüpfend.
arrLines = Split(fso.OpenTextFile(D).ReadAlll, vbCrLf)
Allerdings hast du mit dem Sinn oder Unsinn dieser Aktion schon Recht
Grüße
rubberman
@Biber
@rubberman
Natürlich auch ein Weg (und bei 10000 Zeilen sicherlich auch kein Problem mit der Größe) ...
Grüße
bastla
P.S.:
- Das Leerzeichen in der ersten Zeile wird (auch bisher schon) explizit hinzugefügt.
- Wenn die Datei mit einem CRLF endet, enthält die Datei ja eigentlich schon eine zusätzliche Zeile (die bisher leer war) - falls diese aber tatsächlich kein Leerzeichen bekommen soll, bietet es sich an - da ein "
Trim()
" (oder gezielter: "RTrim()
") nicht treffsicher genug ist (es könnten am Beginn der ersten bzw am Ende der letzten Zeile schon gewollte Leerzeichen existieren) - einfach den String um das (eine) von mir verbrochene letzte Zeichen gekürzt auszugeben:
> %IB% echo D=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject")
>>%IB% echo T=Replace(fso.OpenTextFile(D).ReadAll,vbCrLF,vbCrLf^&" ")
>>%IB% echo fso.CreateTextFile(D).Write " "^&Left(T,Len(T)-1)
Natürlich auch ein Weg (und bei 10000 Zeilen sicherlich auch kein Problem mit der Größe) ...
Grüße
bastla
P.S.:
Ich denke nur an die armen Bätche
Ich doch auch, drum lass' ich die Drecksarbeit ja von einem VBScript (das dann auch noch schuld ist) machen ...
Hallo bastla,
Das überrascht mich allerdings ein bisschen.
... und ich hab mich immer schon gefragt, wozu VBScripte eigentlich gut sind
Guten Rutsch in 2010 an alle, die es lesen.
Grüße
rubberman
Zitat von @bastla:
- Das Leerzeichen in der ersten Zeile wird (auch bisher schon) explizit hinzugefügt.
Das überrascht mich allerdings ein bisschen.
Zitat von @bastla:
...drum lass' ich die Drecksarbeit ja von einem VBScript (das dann auch noch schuld ist) machen
...drum lass' ich die Drecksarbeit ja von einem VBScript (das dann auch noch schuld ist) machen
... und ich hab mich immer schon gefragt, wozu VBScripte eigentlich gut sind
Guten Rutsch in 2010 an alle, die es lesen.
Grüße
rubberman
Hallo rubberman!
Das überrascht mich allerdings ein bisschen.
Inwiefern (siehe Erstfassung)?
Auch von mir alles Gute für 2010
bastla
Zitat von @bastla:
- Das Leerzeichen in der ersten Zeile wird (auch bisher schon) explizit hinzugefügt.
Das überrascht mich allerdings ein bisschen.
>>%IB% echo T=fso.OpenTextFile(D).ReadAll:fso.CreateTextFile(D).Write " "^&Replace(T,vbCrLF,vbCrLf^&" ")
^
bastla
Ich bin mit Blindheit geschlagen, hoffentlich bessert sich das im neuen Jahr. (Allerdings nur, wenn heute Abend nicht ausgerechnet Methyl-gepanschter Fusel drunter ist )
Grüße
rubberman
moin @ all,
ist zwar schon eine Weile her, dass dieser Thread hier geöffnet wurde aber ich denke die Batchlösung für dieses Problem kann ja auch hier rein.
sollte funktionieren ist aus der numberme ab Zeile 57
was sagt denn der Threadstarter ist der grüne Haken noch auffindbar oder brachte die bisherige Diskussion wenig Erfolg?
@rubberman bei dir fehlt das "u" in Quelle Zeile 05
Gruß Phil
ist zwar schon eine Weile her, dass dieser Thread hier geöffnet wurde aber ich denke die Batchlösung für dieses Problem kann ja auch hier rein.
@echo off &setlocal
set Quelle=abc.txt
set Ziel=xyz.txt
for /f "tokens=*" %%i in ('findstr /n .* "%Quelle%"') do (set "Zeile=%%i"
setlocal enabledelayedexpansion
set "Zeile=!Zeile:*:=!"
(for /f %%j in ("!Zeile!") do echo. !Zeile!>>"%Ziel%"&endlocal)||endlocal
)
sollte funktionieren ist aus der numberme ab Zeile 57
was sagt denn der Threadstarter ist der grüne Haken noch auffindbar oder brachte die bisherige Diskussion wenig Erfolg?
@rubberman bei dir fehlt das "u" in Quelle Zeile 05
Gruß Phil
ach das war ebend die Version ohne Die Leerzeilen mitzunehmen aber um diese mitzunehmen ist nur Zeile 08 leicht zu verändern.
Mit LeerZeilen
Gruß Phil
Mit LeerZeilen
@echo off &setlocal
set Quelle=abc.txt
set Ziel=xyz.txt
for /f "tokens=*" %%i in ('findstr /n .* "%Quelle%"') do (set "Zeile=%%i"
setlocal enabledelayedexpansion
set "Zeile=!Zeile:*:=!"
echo. !Zeile!>>"%Ziel%"&endlocal
)
Gruß Phil
@ph
Eigentlich sollte doch auch
genügen ...
(Und natürlich gilt weiterhin, was rubberman schon eingangs erwähnte: <>|& und % im Text führen zu Fehlern.)
Grüße
bastla
Eigentlich sollte doch auch
@echo off & setlocal
set Quelle=abc.txt
set Ziel=xyz.txt
del "%Ziel%" 2>nul
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%Quelle%"') do >>"%Ziel%" echo. %%j
(Und natürlich gilt weiterhin, was rubberman schon eingangs erwähnte: <>|& und % im Text führen zu Fehlern.)
Grüße
bastla