Frage von ChrizzRocks, 79

Batch erstes Zeichen aus jeder Zeile in eine variable einspeichern und dann in .txt Löschen?

hi, ich habe ne Textdatei mit 5 Zeilen. in jeder der zeilen stehen einsen und nullen, pro zeile jeweils 5. nun würde ich gerne mit einer variable von jeder einzelnen zeile die erste 1/0 in eine neue textdatei schreiben, und dann in der Originaldatei löschen. kann mir da jemand weiterhelfen? ich hab erlichgesagt kein plan wie ich das machen soll.

zum verständniss, der inhalt aus newfile.txt (die datei zum auslesen) sieht so aus

10100

11011

01001

01100

10010

(GF.net formatiert das total Hässlich...)

in der neuen datei soll dann in diesem falle 11001 stehen. wäre toll wenn ihr mir weiterhelfen könnt.

Antwort
von PWolff, 35

(Wir brauchen verzögerte Ersetzung von Variablen, deshalb als erstes

SETLOCAL ENABLEDELAYEDEXPANSION

)

(Bitte beachten, dass im folgenden Dateiname NICHT in Anführungszeichen stehen darf, sonst wird der Name selbst statt des Dateiinhalts bearbeitet.)

FOR /F "delims=" %A IN (dateiname) DO (
SET "line=%A"
SET "first=%line:~,1%"
SET "rest=%line:~1%"
REM Zeugs mit first und rest erledigen
)

  Falls der Dateiname in Anführungszeichen stehen muss (weil z. B. eine Klammer, ein Leerzeichen oder ein sonstiges Trennzeichen wie Semikolon drin ist):

FOR /F "usebackq delims=" %A IN (`type "dateiname"`) DO (
  ... (s. o.)
)

  Wenn du nur das erste Zeichen brauchst, kannst du natürlich die Zeile mit rest weglassen.

Um die ersten Zeichen zu sammeln:

SET "ersteZeichen=."
REM in ersteZeichen muss am Anfang was drinstehen, sonst würde %ersteZeichen% zu "%ersteZeichen%" ausgewertet
FOR ... (
... (s. 0.)
  )
echo %ersteZeichen:~1% > "dateiname"
Kommentar von ChrizzRocks ,

du meinst in klammern und nicht in Anführungszeichen oder?

und was meinst du mit in erstes zeichen muss was drinne stehen? was soll das heissen? :D

Kommentar von PWolff ,

Nein, ich meinte schon "in Anführungszeichen". Du kannst es ja mal ausprobieren.

Eine Umgebungsvariable kann nicht leer sein. Sonst schlägt die Ersetzung von %variablennamen% fehl.

Probier's aus:

SET test=Dies ist eine Testvariable.
ECHO %test%
SET test=
ECHO %test%

der 2. ECHO-Befehl liefert nicht wie erwartet eine leere Zeile, sondern den Text "%test%".

-----

Übrigens hab ich was vergessen:

Bei FOR in Batch-Dateien muss das % vor der Schleifenvariablen verdoppelt werden:

FOR /F "delims=" %%A IN (dateiname) DO (
SET "line=%%A"
SET "first=%line:~,1%"
SET "rest=%line:~1%"
REM Zeugs mit first und rest erledigen
)
FOR /F "usebackq delims=" %%A IN (`type "dateiname"`) DO (
  ... (s. o.)
)
Antwort
von Suboptimierer, 42

Ich kann dir als Ansatz ein VBScript anbieten:

Main()

Sub Main()
  Dim fso
  Dim i, j
  Dim oFileRead
  Dim oFileWrite
  Dim sZeile(10000)

' Die ersten Zeichen einer Zeile extrahieren Set fso = CreateObject("Scripting.FileSystemObject") Set oFileRead = fso.OpenTextFile("erstezeichenextrahieren.txt", 1) Set oFileWrite = fso.OpenTextFile("erstezeichenextrahieren_out.txt", 2)
i = 0 While not oFileRead.AtEndOfStream sZeile(i) = oFileRead.ReadLine() oFileWrite.Write(Mid(sZeile(i),1,1)) i = i + 1 Wend oFileRead.Close oFileWrite.Close
' Das erste Zeichen jeder Zeile in der Originaldatei strippen Set oFileWrite = fso.OpenTextFile("erstezeichenextrahieren.txt", 2) For j=0 To i-1 oFileWrite.WriteLine(Mid(sZeile(j), 2, 1024)) Next oFileWrite.Close
Set oFileRead = Nothing Set oFileWrite = Nothing Set fso = Nothing
MsgBox "Fertig!" End Sub

Wenn du das Skript detailierter ausarbeitest, solltest du Arraygrenzen abfangen und maximale Zeilenlängen überprüfen. Die Dateinamen solltest du dynamisch übergebbar machen. Auch solltest du sicherstellen, dass du nur das Original überschreibst, wenn das Lesen geklappt haben sollte. Usf.

Antwort
von mirolPirol, 31

Das geht in jeder Programmiersprache und hat mit einer Batch-Datei nichts zu tun (Batchfile = Stapeldatei).

Du könntest VBA oder VB Script nutzen, wenn du unter Windows arbeitest.

Du öffnest die Text-Datei und erstellst eine neue. Dann liest du die erste Zeile ein und speicherst von diesem String nur das erste Zeichen in die neue Text-Datei. Dann liest du die 2. Zeile und schreibst wieder das erste Zeichen in die neue Datei - so lange, bis die erste Datei komplett eingelesen ist. Dann schließt du die Quell-Datei, schreibst das letzte Zeichen in die Zieldatei und schließt auch diese.

That's it!

Kommentar von RageMode ,

Ich glaube er wollte ein konkretes Code-Beispiel wie man das mit Batch realisieren könnte ^^

Kommentar von ChrizzRocks ,

ja wollte ich :D

Keine passende Antwort gefunden?

Fragen Sie die Community