Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Text-Datei lesen und bearbeiten

Frage Entwicklung Batch & Shell

Mitglied: DexXxtrin

DexXxtrin (Level 1) - Jetzt verbinden

29.05.2008, aktualisiert 22:13 Uhr, 7469 Aufrufe, 22 Kommentare

Hallo Zusammen

Ich möchte bei einer .txt-Datei bestimmte Buchstaben auswechseln durch andere. Dies möchte ich mit jedem Buchstabe in der Ganzen Datei machen. Problem ist, es sind immer andere Texte, das heisst ich weiss nicht wie viele Zeichen, Absätze es sind.
Diese Abänderung soll nur erfolgen, wenn in der ersten Zeile ein bestimmter Wert vorhanden ist.

Der Aufwand spielt keine grosse Rolle, denn ich will es mit Batch realisieren...

Hoffentlich kennt ihr eine Möglichkeit... =)
Mitglied: SarekHL
29.05.2008 um 18:03 Uhr
Per Batch wüßte ich keine Lösung, aber es wäre ein leichtes, ein kleines Basic-Programm zu schreiben, daß diese Aufgabe vollbringt ...
Bitte warten ..
Mitglied: DexXxtrin
29.05.2008 um 18:04 Uhr
Das Problem ist, ich habe keine Ahnung von Basic...
Bitte warten ..
Mitglied: SarekHL
29.05.2008 um 18:09 Uhr
Und dann vermutlich auch keinen Compiler ...

Vielleicht weiß hier ja jemand, wie das per Batch geht , also erst mal abwarten. Wenn nichts kommt, mußt Du mir mal die genaue Aufgabenstellung beschreiben (also welche Zeichen ausgetauscht werden sollen, ob es eine bestimmte, vorauszuwählende Datei ist oder mehrere Dateien, die automatisch verarbeitet werden sollen und so weiter). Wenn ich Zeit habe, kann ich Dir dann ein Tool schreiben ...
Bitte warten ..
Mitglied: DexXxtrin
29.05.2008 um 18:14 Uhr
Es handelt sich um eine Datei, welche der Benutzer festlegt (dieser Bereich habe ich bereits, fehlt nur noch das abändern).
Bitte warten ..
Mitglied: SarekHL
29.05.2008 um 18:17 Uhr
Und dort soll ein Zeichen durch ein anderes ersetzt werden? Handelt es sich immer um das gleiche Zeichen-Paar?
Bitte warten ..
Mitglied: Ricky99
29.05.2008 um 18:23 Uhr
Guck Dir doch mal den SED-Editor an ...

http://sed.sourceforge.net/

Grüße,

Ralf.
Bitte warten ..
Mitglied: DexXxtrin
29.05.2008 um 18:39 Uhr
Ist das eine eingene Sprach, odar ist das eine Funktion mit Batch?
Bitte warten ..
Mitglied: DexXxtrin
29.05.2008 um 18:45 Uhr
Es soll mehr mals ein Zeichen durch ein anderes erstzt werden! Ja es handelt sich immer um das gleiche, aber wenn dieses Zeichenpaar mehrmals vor kommt, sollen alle abgeändert werden.

Ich dachte, dass man vielleicht die Text-Datei untersuchen kann, wie viele Zeichen vorhanden sind. Dann könnte man immer ein Zeichen nach dem anderen rauslesen, überprüfen und in die neue Datei schreiben. Und diesen Vorgang wiederholen, bis alle Zeichen durch sind...

Weiss nicht ob das möglich ist und mit welchen Befehlen (da ich erst neu bin).
Bitte warten ..
Mitglied: SarekHL
29.05.2008 um 18:51 Uhr
Nun ja, das Verfahren ist klar:

- die Quelldatei Zeichen für Zeichen einlesen
- dabei prüfen ob das gerade eingelesene Zeichen das zu ersetzende ist und es dann ersetzen
- das gerade ausgelesene (bzw. ggf. geänderte) Zeichen in die Zieldatei speichern
- nachdem die Datei vollständig verarbeitet wurde ggf. die Quelldatei löschen und die Zieldatei auf den ursprünglichen Namen der Quelldatei umbenennen

In Basic wüßte ich auch, wie das zu bewerkstelligen ist, in Batch hingegen nicht.
Bitte warten ..
Mitglied: Biber
29.05.2008 um 18:55 Uhr
Moin DexXxtrin,

willkommen im Forum.
Als Moderator von "Batch & Shell" weise ich jede Zuständigkeit für Deine Anforderung weit von mir.
Dafür sind die mitgelieferten Batch-Befehle NICHT sinnvoll geeignet.
Batch arbeitet ZEILEN-orientiert, Du brauchst etwas ZEICHEN-orientiertes.

Ricky99's Tipp mit SED ist goldrichtig und ich würde Dich auch bitten, erst mal dem oben geposteten Link zu folgen und (sei tapfer) es damit auch zu versuchen.
Warnung: es sieht absolut unverständlich aus ...aber nur auf den ersten Blick.

Wenn Du es versucht hast und nicht zu einem Erfolgserlebnis kommen solltest, dann machen wir hier weiter.

Grüße
Biber
Bitte warten ..
Mitglied: DexXxtrin
29.05.2008 um 19:18 Uhr
Funktioniert SED auch mit dem normalen Windows-Editor und dann als BATCH? Oder braucht man da seperate Programme?
Bitte warten ..
Mitglied: SarekHL
29.05.2008 um 19:29 Uhr
Nur mal als Tipp: Die meisten Mitglieder hier verstehen administrator.de als Hilfe zur Selbsthilfe. Hast Du Dir mal die Mühe gemacht, Dich etwas in die Seite einzulesen, die Ricky99 Dir empfohlen hat? Wenn es dann für Dich nicht geeignet ist, können wir immer noch weitersehen, ob wir eine andere Lösung finden, aber erst mal solltest Du (selber) prüfen, ob der Lösungsvorschlag geeignet ist ...
Bitte warten ..
Mitglied: bastla
29.05.2008 um 20:02 Uhr
Hallo DexXxtrin!

Auch wenn ich mich grundsätzlich dem "sed"-Vorschlag anschließe, wäre auch (zur Not) eine Lösung mit Batch machbar (abhängig von den sonstigen Inhalten der .txt-Datei), allerdings hat auch Biber schon darauf hingewiesen, dass das nicht das richtige Werkzeug für Dein Vorhaben ist - besser geeignet ist zB, wie von SarekHL vorgeschlagen, Basic.

Um dennoch mit Bordmitteln (und tatsächlich ein wenig Batch) an die Sache heranzugehen, könntest Du es (unter Verwendung von temporärem VBScript) etwa so anlegen:
01.
@echo off & setlocal 
02.
set "Quelle=D:\Dein Text.txt" 
03.
set "Von=X" 
04.
set "Nach=Y" 
05.
 
06.
set R=%temp%\Repl.vbs 
07.
echo Set fso=CreateObject("Scripting.FileSystemObject"):F=WScript.Arguments(0):T=fso.OpenTextFile(F).ReadAll:fso.OpenTextFile(F,2,True).Write Replace(T,"%Von%","%Nach%")>%R% 
08.
 
09.
cscript //nologo %R% "%Quelle%"
Die Ersetzung erfolgt "in" der Quelldatei (gemeint ist, dass keine Sicherungskopie angelegt wird, sondern die Ausgangsdatei durch die neue Version ersetzt wird) und ist "case sensitive" (berücksichtigt Groß-/Kleinschreibung - "X" wird ersetzt, "x" nicht).
Trotzdem noch einmal zurück zu "sed":
Funktioniert SED auch mit dem normalen Windows-Editor und dann als BATCH? Oder braucht man da seperate Programme?
Du brauchst eine Windows-Version ("sed.exe"), welche Du dann als Filter in einer Batch-Zeile verwenden kannst.

Grüße
bastla

[Edit] Der horizontale Scrollbalken für Codeblöcke ist offensichtlich Rationalisierungsmaßnahmen zum Opfer gefallen ... Wenn Du den Code als "Quelltext" anzeigst oder "in den Speicher kopierst" bekommst Du aber die vollständige Zeile 7 geliefert. [/Edit]

[Edit2 by Biber] Den Bug sehe ich auch (im IE6). Habe es als Bug #490 eingetragen. [/Edit2]
Bitte warten ..
Mitglied: DexXxtrin
29.05.2008 um 20:58 Uhr
Ich habe mich sehr wohl mit SED auseinander gesetzt! Habe auf verschiedenen Seiten nachgeschaut, aber es war NIERGENDS beschrieben, wie man SED programmiert! Deshalb meine Frage! Somit vielen Dank and bastla!

Was ich nicht kapiere bei dem ganzen: Wie programmiert man dieses SED???
Ich bin zum Beispiel auch auf diese Seite gestossen: http://www.ostc.de/sed.pdf
Da wird alles Wunderbar erklärt. Abar wie man das Programmiert erklärt niemand.

Ich kenne zwar die Befehle, mit welchem ich was machen kann. Aber wie ich ein Programm schreibe habe ich null Ahnung.
Tut mir leid, abar langsam bin ich am verzeifeln.
Aus der Englischen Seite werde ich nicht ganz schlau und aus dem Rest den ich finde auch nicht!

Ich möchte wissen, ob man diesen Code auch im Editor schreiben muss, als was abspeichern (*.sed?). Kann man das mit Batch im gleichen Script schreiben, was mit sed.exe machen?
Bitte warten ..
Mitglied: bastla
29.05.2008 um 21:11 Uhr
Hallo DexXxtrin!

In Deinem Fall wäre das etwa so:
01.
type "D:\Dein Text.txt"|sed s/X/Y/g>"D:\Dein neuer Text.txt"
Ablauf:
  • Ausgabe der Quelldatei,
  • filtern mit "sed" (die "sed.exe" muss im Pfad %path% auffindbar sein oder mit vollständigem Pfad, zB "C:\Tools\sed", angegeben werden); wobei mit dem "g" am Ende "globales Ersetzen" (= alle Vorkommen von "X" innerhalb der Datei werden durch "Y" ersetzt) festgelegt wird, und
  • Schreiben (per Umleitung) der (veränderten) Ausgabe in eine neue Datei.

Es genügt also letztlich eine Zeile Batch ...

Grüße
bastla
Bitte warten ..
Mitglied: DexXxtrin
29.05.2008 um 21:39 Uhr
Ich habe jetzt mal zum Versuchen eine Batchdatei geschrieben, die sieht volgendermassen aus:

@echo off
set /P path=Pfad von sed.exe
type "D:\Text.txt"|sed y/x/y/g>"D:\Text1.txt"

der Befehl set ist, damit die sed.exe im Pfad %path% (wie bastla sagt) auffindbar ist.
Nun ist die Ausgabe Datei Text1.txt lehr....
Bitte warten ..
Mitglied: bastla
29.05.2008 um 21:47 Uhr
Hallo DexXxtrin!

Die Variable %path% solltest Du auf keinen Fall durch einen neuen Eintrag ersetzen, sondern nur ergänzen - gemeint war aber eigentlich, dass die "sed.exe" in einem Verzeichnis, das im schon vorhandenen %path% steht, abgelegt sein sollte (zB C:\Windows\System32).

Versuch es aber einfach so:
01.
type "D:\Text.txt"|"Pfad von sed.exe\sed" s/x/y/g>"D:\Text1.txt"
Übrigens sind manchmal auch leere Dateien lehrreich ...

Das "s" nach "sed" (und vor "/x/y/g") steht übrigens für "substitute", und das willst Du ja eigentlich machen [Edit] ... oder eigentlich auch wieder nicht, wenn es ja jeweils nur ein einzelnes Zeichen sein soll, daher ist "y" schon OK ... [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: DexXxtrin
29.05.2008 um 21:55 Uhr
Ups da hab ich wohl was falsch verstanden...
Aber vielen Dank für deine Hilfe!!! Jetzt hat es funktioniert!!
Da nicht bestimmt ist wo sed.exe ist, habe ich es so gemacht:

@echo off
set /P sed=
type "D:\Text.txt"|"%sed%" y/x/y/g>"D:\Text1.txt"

Das ganze funktioniert perfekt!=)

Vielen Dank an alle für eure bemühungen!!!
Bitte warten ..
Mitglied: Biber
29.05.2008 um 21:58 Uhr
Moin,

und es könnte sinnvoller sein, wie bastla auch oben gepostet hat, von einer Datei in eine andere zu schreiben (Datei->DateiNeu) und gegebenfalls danach unzubenennen.
Sonst bleibt die Zieldatei nämlich im Fehlerfall leer und es lässt sich dann nur begrenzt wiederholen.

Grüße
Biber
P.S. Ich verkneife es mir schon seit Stunden: wofür ist denn dieses Krams?
Verschlüsselung von Schulhof-Post?
Bitte warten ..
Mitglied: DexXxtrin
29.05.2008 um 22:05 Uhr
Moin,

Ich habe ja in eine neue Datei geschrieben...!? Von Text->Text1

@bastla
Ich habe das s nach sed und vor /x/y durch y ersetz, da ich mit s nur einen Ausdruck verändern kann, mit y kann ich mehrere Buchstaben verändern.
Wenn ich s/xy/vw/g schreibe, ersetzt es mir alle xy durch vw, aber wenn ich dies so schreibe
y/xy/vw/ ersetzt es alle x durch v und alle y durch w.
Hoffe habe die Befehle richtig verstanden!

Gruss DexXxtrin
Bitte warten ..
Mitglied: bastla
29.05.2008 um 22:05 Uhr
Da nicht bestimmt ist wo sed.exe ist ...
Den Pfad eingeben zu müssen ist nicht wirklich elegant - lege die "sed.exe" doch einfach in das selbe Verzeichnis wie die Batchdatei, und schreibe dann:
01.
type "D:\Text.txt"|"%~dp0sed" y/x/y/>"D:\Text1.txt"
Grüße
bastla
Bitte warten ..
Mitglied: bastla
29.05.2008 um 22:13 Uhr
ich habe das s nach sed und vor /x/y durch y ersetz, da ich mit s nur einen Ausdruck verändern kann, mit y kann ich mehrere Buchstaben verändern.
Ja, sorry, war mir zu spät auf-/eingefallen ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (22)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...