online 1
gast (50)

/ Forum / Anwendungen(Java,C++...)

Anwendungen(Java,C++...)Anwendungen(Java,C++...)

Fragevon negellenf vom 17.08.2022, 23:19 Options

[Batch] Text aus einer Datei löschen

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


Antwort schreiben

Antwort 1 von chiggels vom 18.08.2022, 00:20 Options

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

Antwort 2 von supporter2010 vom 18.08.2022, 07:44 Options

Das klappt auch mit AutoIt http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3-se...

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

; 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, sup2010

Antwort 3 von son_quatsch vom 18.08.2022, 07:57 Options

StringReplace()! Wie gut läuft denn das ganze bei 50 MiB Textdateien? Die Frage ist rhetorisch.

Antwort 4 von supporter2010 vom 18.08.2022, 08:02 Options

@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... ;-)

Antwort 5 von son_quatsch vom 18.08.2022, 09:45 Options

Zitat:
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. :-)

Antwort 6 von supporter2010 vom 18.08.2022, 09:50 Options

Zitat:
ssed hingegen ist eine EXE, die

...ich mir bei nächster Gelegenheit mal ansehen werde...

Antwort 7 von supporter2010 vom 18.08.2022, 10:01 Options

oh!!kay...

ssed ist wohl doch die bessere wahl ;-) , damit lässt sich wohl auch besser batchen...

Antwort 8 von negellenf vom 18.08.2022, 16:13 Options

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

Antwort 9 von son_quatsch vom 18.08.2022, 16:34 Options

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"

Antwort 10 von tiggerlilli vom 18.08.2022, 16:38 Options

hier eine anleitung

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

Zitat:
(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 ;-.)

Antwort 11 von negellenf vom 18.08.2022, 16:43 Options

Ich träume nachts von PHP-Code
:P

Antwort 12 von negellenf vom 18.08.2022, 17:01 Options

Zitat:
ssed s/(DB_1-INT\/EXT-ERROR)//g -i.bak "beispiel.txt"


Wenn ich das anwende erstellt ssed eine neue Datei die beispiel.txt.bak heißt. Wenn man diese mit dem editor öffnet, hat sie den selben Inhalt wie die "beispiel.txt"
Und bei beiden steht immer noch "DB_1-INT/EXT-ERROR" drinnen.

Was tun?

Antwort 13 von tiggerlilli vom 18.08.2022, 21:26 Options

Zitat:
Was tun?


sonQuatsch hat es ausprobiert und es ging. ich habe es ausprobiert und es ging ( siehe unten )

also empfehle ich dir, probiere es gründlich aus, achte auf den syntax und tippfehler.

lg


Zitat:
c:>type test.txt

(DB_1-INT/EXT-ERROR) 111
(DB_1-INT/EXT-ERROR) 222
(DB_1-INT/EXT-ERROR) 222


c:\>ssed s/(DB_1-INT\/EXT-ERROR)//g "test.txt"

111
222
222

Antwort 14 von tiggerlilli vom 18.08.2022, 21:30 Options

ps:

und wenn in deiner originalen textdatei der string G:\DOWN>type test.txt (DB_1-INT/EXT-ERROR) nicht in klammern steht,
dann darfst du ihn im sed parameter natürlich auch nicht in klammern schreiben ;-)

der syntax ist ja:

ssed s/SUCHSTRING/ERSETZSTRING/g

s = substitute / ersetzen
g = global, dh in der ganzen zeile, falls es öfters vorkommt

LG

Antwort 15 von tiggerlilli vom 18.08.2022, 21:30 Options

das war gemeint: (DB_1-INT/EXT-ERROR)

Antwort 16 von negellenf vom 18.08.2022, 23:14 Options

Danke, funktionuert jetzt. Was würde ich nur ohne euch machen!?

Es lag an der in-Kalmmer-Schreibung.

Ähnliche Themen

Internet Login via Batch-Datei
amazZzing  31.03.2009 - 1748 Hits - 23 Antworten

Java Text-Datei einlesen mit LineNumberReader
Hallo156  24.04.2009 - 1385 Hits - 2 Antworten

Mit Batch-Datei bestimmet Textstelle ändern
intery  05.03.2010 - 269 Hits - 7 Antworten

Batch - Input in datei speichern
Batman321  06.02.2010 - 305 Hits - 1 Antwort

Über Batch die Revision einer Datei im Dateiname anzeigen
EP-Compiler  16.08.2010 - 123 Hits - 14 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026