moebelwachs
Goto Top

Ein Zeichen in einer SEHR großen TXT Datei ersetzen

Moin,

folgendes Problem:
In einer recht großen textdatei (150000 Zeilen x 300 Zeichen) muß ein ";" gegen ein "|" ausgetauscht werden. Ich hab schon mehrere Texteditoren probiert, die alle streiken. Excel geht auch nicht, weil hier der Trenner "|" nicht explizit verwendet werden kann.
Meine Frage: Wie kann ich diese Aufgabe per Batch lösen ?
Danke vorab,
schöne grüße Wolfgang

Content-ID: 184313

Url: https://administrator.de/contentid/184313

Ausgedruckt am: 26.11.2024 um 02:11 Uhr

schattenhacker
schattenhacker 01.05.2012 um 11:52:28 Uhr
Goto Top
hi,

da streiken viele Programme, excel hätte ich gar nicht erst probiert.
Ich habe das mal gelöst, indem man die Zeilen in eine Datenbank einliest und die Felder wie der mit "" exportiert.
Ist etwas Arbeit, aber wenn es nicht zu viele Felder sind benötigst Du weniger zeit als mit dem Rumprobieren div. Programme.

gruss jo
schattenhacker
schattenhacker 01.05.2012 um 11:56:00 Uhr
Goto Top
ausserdem: wenn du in einem Feld ein , drin hast dann klappt das eh nicht.
also bei ( soll keine Werbung sein )" "real, " aber nicht bei aldi" bringt deine Felder total durcheinander.
die erwähnte Möglichkeit gibt dir die Chance, gleich die Inhalte aufzuräumen.
106009
106009 01.05.2012 um 12:14:50 Uhr
Goto Top
Zitat von @moebelwachs:
Ich hab schon mehrere Texteditoren probiert, die alle streiken.

Dann hast du offenbar nicht die richtigen Editoren ausprobiert.
Versuch mal EditPad(-lite).

Gruß
laster
laster 01.05.2012 um 12:15:54 Uhr
Goto Top
Hallo,

das ist eine Textdatei mit einer Größe von etwa 42 MB?
Hast Du schon mal Ultraedit (Editor) oder "InfoRapid Suchen & Ersetzen" probiert? Letzteres Programm kann das sicher (und dazu in vielen Dateien - wenn es nötig ist).

Gruß
Lars
gemini
gemini 01.05.2012 um 12:28:12 Uhr
Goto Top
Hallo Wolfgang,

ich würde Notepad++ nehmen.
Eine Textdatei mit ~ 400MB (ca. 930.000 Zeilen) konnte ich damit problemlos öffnen.

Gruß,
gemini
mak-xxl
mak-xxl 01.05.2012 um 12:55:05 Uhr
Goto Top
Moin Wolfgang,

wenn es kein Editor sein muss, kann 'sed' unter Win (Gnu-Pack) oder Linux helfen:

sed -u -i "~s|;|\||g" datei.txt

Das Ganze auf der Befehlszeile oder als Batch Einzeiler.

Freundliche Grüße von der Insel - Mario
moebelwachs
moebelwachs 01.05.2012 um 13:53:02 Uhr
Goto Top
Danke für alle Tips, sed war die Lösung !
Die ganzen Editoren schmieren ab, obs nun Notepad++, Ultraedit, Excel ... ist.

Wieder was gelernt ;)
Danke,
Schöne Grüße Wolfgang
pieh-ejdsch
pieh-ejdsch 01.05.2012 um 13:54:55 Uhr
Goto Top
moin Wolfgang,


als Batch in etwa so:
@echo off
setlocal disabledelayedexpansion
if "%~1" == "" echo Syntaxfehler. Datei angeben!&goto :eof  
if not exist "%~1" echo Datei nicht gefunden!&goto :eof  
findstr /n "^" "%~1" > "%~1.LN"  
(
for /f "usebackq tokens=*" %%i in  ("%~1.LN") do (  
  set "Zeile=%%i"  
  setlocal enabledelayedexpansion
  set "Zeile=!Zeile:;=|!"  
  echo\!Zeile:*:=!
  endlocal
)
)>"%~1-Neu.TXT"  
del "%~1.LN"  

[Edit]
ein sekündchen zu spät ...
[/Edit]

Gruß Phil
moebelwachs
moebelwachs 01.05.2012 um 14:07:43 Uhr
Goto Top
Trotzdem .. Merci ;)
bastla
bastla 01.05.2012 um 14:38:52 Uhr
Goto Top
Hallo moebelwachs!

Um die gesammelten Werke zu komplettieren als weitere Alternative mit Bordmitteln die VBS-Variante dazu:
Ein = "D:\Datei_alt.txt"  
Aus = "D:\Datei_neu.txt"  
Von = ";"  
Nach = "|"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set E = fso.OpenTextFile(Ein)
Set A = fso.CreateTextFile(Aus)
Do While Not E.AtEndOfStream
    A.WriteLine Replace(E.ReadLine, Von, Nach)
Loop
Grüße
bastla
FOrtwein
FOrtwein 03.05.2012 um 14:56:28 Uhr
Goto Top
Hallo,

warum nicht einfachste aller Lösungen

MICROSOFT WORD?!?!?!

Da kannst du sogar während dem Landen der Datei schon Änderungen vornehmen.

Gruß
Frank
moebelwachs
moebelwachs 03.05.2012 um 20:36:47 Uhr
Goto Top
...das hab ich doch glatt der wissenschaft halber noch ausprobiert face-smile
Nach 683 Seiten meinte Word(2010), daß ich die maximale Anzahl Seiten überschritten hätte.
Die Entwurfsansicht funktionierte und zählte 3.239.237 Zeichen. WORD selbst war nicht mehr sehr
kooperativ, die meiste Zeit verbrachte es mit "keiner Rückmeldung" trotz 4GB RAM und einer angegeben Dateigröße von
169 MB (rein Text, ohne Bilder).

Für Forscher zum Vergleich die von MS zur Verfügung gestellten Werte:
http://support.microsoft.com/kb/211489/de

Grüße
pieh-ejdsch
pieh-ejdsch 03.05.2012 um 21:48:08 Uhr
Goto Top
Hallo Frank,

das soll ja hier nicht die Aufgabe sein, eine so große Datei auf den Bildschirm darzustellen.
Word muss ja erst alles Durchnudeln und im Speicher halten. Etwa 3 mal Dateigröße ...

So ein Script frag auch nicht erst nach der Codierung.
Beim Ersetzen mit den Scripten werden die Dateien geöffnet, gelesen und geschlossen (Beim Batch zum Beispiel jedesmal je Zeile)
Die Ergebnisse werden in eine Neue Datei geschrieben.

Ein Abarbeiten Zeile für Zeile ist so im Endeffekt viel effektiver.

Gruß Phil