4.1k Aufrufe
Gefragt in Anwendungen(Java,C++...) von
Hallo Community, ich habe eine Frage, und zwar:
Ich erstelle viele Dateien(mit Texteditor lesbar) und meistens spinnt das Programm mit dem ich diese erstelle und schreibt einfach in die Dateien noch DB_1-INT/EXT-ERROR
Es ist aber eigentlich kein Fehler. Ich benutze das Programm nur für einen anderen Zweck als gedacht. Und leider gibt es keine Alternativen...
Gibt es eine Möglichkeit das über Batch diese Textstelle (DB_1-INT/EXT-ERROR) rauszulöschen?

Gruß
Lars

16 Antworten

0 Punkte
Beantwortet von
ich würde das mit SuperSED machen.

für sed findest du mit google sehr viele beispiele von denen du dir nur eins anpassen musst.

lg
0 Punkte
Beantwortet von Experte (6.4k Punkte)
Das klappt auch mit AutoIt www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3-setup.exe

Dein Problem war ideal für mich um AutoIt mal zu testen, Ich hab' da mal was vorbereitet:

; Datei auswählen
$message = "Bitte Datei auswählen"
$path = "\autoIt_tests\"
$fileToUse = FileOpenDialog($message, $path, "Text (*.txt)", 1 )

If @error Then
MsgBox(16,"Hinweis","Keine Datei(en) ausgewählt!"& @CRLF & "Programm wird beendet")
Exit ;Programm beenden
Else
$fileToUse = StringReplace($fileToUse, "|", @CRLF)
MsgBox(64+1,"Hinweis","Es wurde folgende Datei ausgewählt: "& @CRLF & $fileToUse)
EndIf

$filename = $fileToUse
$fileH = FileOpen($filename, 0) ; 0 => Readonly

; Check if file opened for writing OK
If $fileH = -1 Then
MsgBox(16, "Fehler", "Datei konnte nicht geöffnet werden!")
Exit
EndIf

; Datei bis EOF einlesen

$content = FileRead($filename)


$stringToFilter = "DB_1-INT/EXT-ERROR" ; zu ersetzender Text
$replacementString = "" ; leere Zeichenfolge

; Text ersetzen
$content = StringReplace($content, $stringToFilter, $replacementString)


;$newname = $filename ; neuer Name = alter Name
; Abfrage des neuen Dateinamens
$newname = InputBox("Neuer Dateiname", "Neuen Dateinamen eingeben oder aktuellen beibehalten(Cancel bricht das Programm ab):", $filename )


IF @error = 1 Then ; 1 => Cancel, Abbruch mit Meldung
MsgBox(48, "Hinweis", "Programm wird abgebrochen!" & @CRLF & "Diese Meldung zerstört sich selbst in 5 Sekunden.", 5)
Exit
EndIf

; Neue Datei erzeugen und Text einfügen -> ,2 => inhalt der neuen Datei löschen
$newfile = FileOpen($newname,2)

FileWrite($newfile, $content)
FileClose($newfile)

FileClose($fileH)


Das ist allerdings mein erstes AutoIt-Script und bietet deshalb mit Sicherheit noch einiges an Optimierungspotential. Aber es funktioniert, d.h. es löscht aus einer auswählbaren ANSI-Textdatei DB_1-INT_EXT-ERROR heraus (egal, wo es steht).

Man kann es ganz einfach zum Laufen bringen:
1. AutoIt runterladen (ca. 8 MB) und installieren (bei der Installation auswählen, dass au3-Dateien per Doppelklick editiert und nicht ausgeführt werden)
2. Per Rechtsklick > Neu > AutoIt-Script erstellen eine neue Scriptdatei erstellen, benennen und doppelklicken
3. In den Editor das Script kopieren und über Tools > Go (oder F5) testen oder über Tools > Build (bzw. F7) eine exe erstellen und sich freuen

Allerdings muss mein Script zumindest für Deine Bedürfnisse angepasst werden, da Du ja so ein Geheimnis um Deine Dateien gemacht hast, bzw. eventuell optimiert werden.


mfg, sup[sup]2010[/sup]
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
StringReplace()! Wie gut läuft denn das ganze bei 50 MiB Textdateien? Die Frage ist rhetorisch.
0 Punkte
Beantwortet von Experte (6.4k Punkte)
@sonquatsch

Ja, das ist halt die Frage mit was für Dateien er arbeitet, das war aus der Fragestellung nicht zu erkennen. Wenn es sich nicht um ANSI-Dateien handelt, kann er das sowieso nicht benutzen, jedenfalls nicht so.
Aber wenn das das Einzige ist, was Du zu bemängeln hast... ;-)
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Aber wenn das das Einzige ist, was Du zu bemängeln hast... ;-)
Wenn du schon fragst: nein. AutoIt muss man installieren - ssed hingegen ist eine EXE, die auch problemlos in jeder anderen Umgebung auf Anhieb läuft. Von der Möglichkeit regulärer Ausdrücke mal ganz zu schweigen. :-)
0 Punkte
Beantwortet von Experte (6.4k Punkte)
ssed hingegen ist eine EXE, die

...ich mir bei nächster Gelegenheit mal ansehen werde...
0 Punkte
Beantwortet von Experte (6.4k Punkte)
oh!!kay...

ssed ist wohl doch die bessere wahl ;-) , damit lässt sich wohl auch besser batchen...
0 Punkte
Beantwortet von
Hallo.
Danke für die Antworten. Ich habe mich für SED entschieden, da man das nicht installieren muss.
Leider finde ich keine guten Tutorials auf deutsch und Englisch ist mir noch zu schwierig. (Bin erst 13)
Könnte das jemand für mich erledigen?

Danke :D
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Vorsicht - der Fund heißt ssed, nicht sed.
So ging es bei mir einwandfrei:
ssed s/(DB_1-INT\/EXT-ERROR)//g -i.bak "die zu ändernde datei.txt"
0 Punkte
Beantwortet von
hier eine anleitung

de.wikipedia.org/wiki/Sed_%28Unix%29

(Bin erst 13)

apropo, mit 13 hab ich seinerzeit schon C64 spiele ge*Z*t und nachts von hex code geträumt.
als ausrede lass ich das nicht gelten ;-.)
...