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-Key: 184313

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: schattenhacker
schattenhacker May 01, 2012 at 09:52:28 (UTC)
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
Member: schattenhacker
schattenhacker May 01, 2012 at 09:56:00 (UTC)
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.
Mitglied: 106009
106009 May 01, 2012 at 10:14:50 (UTC)
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ß
Member: laster
laster May 01, 2012 at 10:15:54 (UTC)
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
Member: gemini
gemini May 01, 2012 at 10:28:12 (UTC)
Goto Top
Hallo Wolfgang,

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

Gruß,
gemini
Member: mak-xxl
mak-xxl May 01, 2012 at 10:55:05 (UTC)
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
Member: moebelwachs
moebelwachs May 01, 2012 at 11:53:02 (UTC)
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
Member: pieh-ejdsch
pieh-ejdsch May 01, 2012 at 11:54:55 (UTC)
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
Member: moebelwachs
moebelwachs May 01, 2012 at 12:07:43 (UTC)
Goto Top
Trotzdem .. Merci ;)
Member: bastla
bastla May 01, 2012 at 12:38:52 (UTC)
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
Member: FOrtwein
FOrtwein May 03, 2012 at 12:56:28 (UTC)
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
Member: moebelwachs
moebelwachs May 03, 2012 at 18:36:47 (UTC)
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
Member: pieh-ejdsch
pieh-ejdsch May 03, 2012 at 19:48:08 (UTC)
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