Erstes Zeichen oder gezielt Anführungszeichen entfernen
Moin zusammen,
ich scheitere seit Stunden an dem Versuch, aus einer txt-Datei via batch Anführungszeichen zu entfernen. Die Datei sieht Beispielhaft so aus:
Die Datei besteht aus mehreren 100.000 Zeilen.
Egal was ich hier oder anderswo mit google gefunden habe, führte nicht zum Erfolg.
Da die Anführungszeichen wenn sie auftauchen immer ganz vorne und alle Zeilen insgesamt mindestens ein Leerzeichen vorne stehen haben, habe ich u.a. auch versucht Zeilenweise auszulesen, dabei das erste Zeichen zu überspringen und in eine Zieldatei zu schreiben. Egal wie...es will nicht klappen.
Danke schonmal für Tipps
Gruß
Itchley
ich scheitere seit Stunden an dem Versuch, aus einer txt-Datei via batch Anführungszeichen zu entfernen. Die Datei sieht Beispielhaft so aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
<numRiRecs>2</numRiRecs>
<RiRec>
<rirecIP>192.168.253.11</rirecIP>
<rirecName>KR16</rirecName>
<caLo>
" <CaLo>
<iPosRels>
<CImagePosRel>
<asCo>
<xC>58400</xC>
<yC>5850</yC>
<zC>562</zC>
</asCo>
</transMatrx>
</CaLoc>
"
" <CaLoc>
<iPosRels>
<CImagePosRel>
...
Egal was ich hier oder anderswo mit google gefunden habe, führte nicht zum Erfolg.
Da die Anführungszeichen wenn sie auftauchen immer ganz vorne und alle Zeilen insgesamt mindestens ein Leerzeichen vorne stehen haben, habe ich u.a. auch versucht Zeilenweise auszulesen, dabei das erste Zeichen zu überspringen und in eine Zieldatei zu schreiben. Egal wie...es will nicht klappen.
Danke schonmal für Tipps
Gruß
Itchley
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2245529245
Url: https://administrator.de/forum/erstes-zeichen-oder-gezielt-anfuehrungszeichen-entfernen-2245529245.html
Ausgedruckt am: 08.04.2025 um 21:04 Uhr
10 Kommentare
Neuester Kommentar

Hallo,
Du könntest z.B. mit einem x-beliebigen Texteditor die Zeichenkette Leerzeichen-Anführungszeichen durch ein einzelnes Leerzeichen ersetzen.
Unter Linux ginge das auch mit sed.
Gruß,
Jörg
Du könntest z.B. mit einem x-beliebigen Texteditor die Zeichenkette Leerzeichen-Anführungszeichen durch ein einzelnes Leerzeichen ersetzen.
Unter Linux ginge das auch mit sed.
Gruß,
Jörg
Ich nehme an, so sollte das mit Batch pur funktionieren (wenn das auch nicht mehr zeitgemäß ist).
Das
Die letzte Zeile überschreibt die ursprüngliche Datei. Kannst du auch erst mal weglassen, um das Ergebnis zu begutachten.
Steffen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
:: @echo off
@echo on
setlocal
set "file=foo.xml"
setlocal EnableDelayedExpansion
>nul chcp 65001
set quote="
<"!file!" >"!file!.~tmp" (
echo off
for /f %%i in ('type "!file!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (
set "ln="&set /p "ln="
if "!ln:~,1!"=="!quote!" (
echo(!ln:~1!
) else (
echo(!ln!
)
)
)
move /y "!file!.~tmp" "!file!"
endlocal
chcp 65001
ändert das Encoding zu UTF-8, was üblich (Standard) für XML Daten ist.Die letzte Zeile überschreibt die ursprüngliche Datei. Kannst du auch erst mal weglassen, um das Ergebnis zu begutachten.
Steffen
Moin,
ich würde das mit der Powershell lösen:
Beachte das Zeichen "Backtick (`)" im Replace. das sorgt dafür, dass das zu ersetzende Zeichen (hier: ") escaped wird. Das Symbol selbst erzeugst du mit [Shift] und [´] (links, neben der Backspace-Taste)
Gruß
em-pie
ich würde das mit der Powershell lösen:
1
2
2
$xml = "C:\test\MyFile.xml"
(Get-Content -Path $xml) -replace "`"","" | Out-File -FilePath $xml
Beachte das Zeichen "Backtick (`)" im Replace. das sorgt dafür, dass das zu ersetzende Zeichen (hier: ") escaped wird. Das Symbol selbst erzeugst du mit [Shift] und [´] (links, neben der Backspace-Taste)
Gruß
em-pie

Die Idee mit sed hätte mir auch mal kommen können...
Und gerade bei großen Dateien im Speed so gut wie kaum schlagbar.Inplace Ersetzung bspw. so
1
sed -rie 's/^(\s*)"/\1/' datei.xml
Autsch. Und es gibt keine Möglichkeit die Ursache statt der Symptome zu bekämpfen?
Steffen
Steffen
Eines sollte ich noch erwähnen:
Die Technik, die Datei mit
Ist halt unendlich schwer, Batchcode zu schreiben, der einigermaßen verlässlich funktioniert, bei all den Bugs und Unzulänglichkeiten die man dazu kennen und zum Teil gezielt ausnutzen muss. Es hat ganz reale Gründe, warum Batch für Produktivcode nicht mehr verwendet werden sollte. Auch wenn sich die meisten Leute hier auf nichtssagende Erklärungen beschränken, die etwa so aussehen:

Steffen
Die Technik, die Datei mit
set /p
zu lesen, hat den Vorteil, dass nicht ständig zwischen Enable/DisableDelayedExpansion
hin und her gewechselt werden muss. Dass würde die Laufzeit des Scripts bei hunderttausenden von Zeilen nämlich ins Unendliche anwachsen lassen. Der Nachteil ist, dass nur Zeilen bis zu einer Länge von 1021 Bytes sicher gelesen werden. In den meisten Fällen sollte das nicht der Fall sein, allerdings kenne ich deine Daten nur von deinem Beispiel...Ist halt unendlich schwer, Batchcode zu schreiben, der einigermaßen verlässlich funktioniert, bei all den Bugs und Unzulänglichkeiten die man dazu kennen und zum Teil gezielt ausnutzen muss. Es hat ganz reale Gründe, warum Batch für Produktivcode nicht mehr verwendet werden sollte. Auch wenn sich die meisten Leute hier auf nichtssagende Erklärungen beschränken, die etwa so aussehen:
Steffen