heinze
Goto Top

Ausgabe for -f teilweise falsch? incl. Edit

WIN10 /CMD

Hallo @ all,
ich würde mal Eure Hilfe brauchen

Ich habe hier ein äusserst ungewöhnliches (für mich) Verhalten der FOR /F Schleife.
(bitte entschuldigt den langen Text, aber wie soll ichs sonst erklären?)
Vorgeschichte:
Ich lade mittels „wkhtmltopdf“ eine Webseite aus dem Internet (wget bringt nicht den gewünschten Erfolg) (zeitgesteuert).
Das Ausgabeformat von wkhtmltopdf ist ein .Pdf.
Dieses PDF wird mittels pdftotext in ein Txt umgewandelt (die HTML2txt-Tools bringen schlechteres Ergebniss)
Lt. Notepad++ ist das Txt im ANSI-code und mit der Notepade++ -Option „alle nicht druckbaren Zeichen anzeigen finde ich nicht ungewöhnliches.
Checke ich das Txt in einem Hexeditor (XVI32) ist ebenfalls alles unauffällig.

Zur Problembeschreibung 2 Beispielmusterzeilen aus dem Txt-File:
tmp


Auszug aus Notepad++:
notepad

Auszug aus Hexeditor:
hexeditor

Jage ich nun das txt durch einen for /F-loop:

setlocal EnableDelayedExpansion
.
for /f "skip=3 tokens=1,2,3,4,5,6,8,9" %%i in %source% do (  
	echo %%i %%j %%k-%%l %%m-%%n-%%o-%%p>>G:\Muster.txt

erhalte ich folgenden Output:
Die ersten 2 Zeilen:
Love You for-Life 10:39-PM--
Three Plus - ---

Eigentlich würde ich erwarten:
Love You for Life 10:39 PM--
Three Plus------


Wo liegt der Fehler im Script?
A. Daß in der ersten Zeile die Ausgabe
Love You for-Life 10:39-PM-- mit dem falschen „-„ zw. "for Life" und zw. "10:39 und PM"
und
B. In der zweiten Zeile Lücken zwischen den „Strichen“ sind
- --- ist statt ------?

Alle Zeilen im Txt-File sind ordnungsgemäss mit CR und LF abgeschlossen.
Diese Ungereimtheiten ziehen sich über die ganze „Muster.txt“ hin.
Nachdem ich die „Muster.txt“ weiter bearbeiten muss stören diese Ungereimtheiten gewaltig
Die "Striche" in den Zeilen sind doch die "leeren/nicht vorhanden" %%Variablen oder?
Wer weis mir da Rat?

Mit besten Grüßen
Heinze

----------------------------EDIT------------------
Nach einmal drüber schlafen habe ich folgende Änderungen in der Syntax der FOR /-Schleife vorgenommen:

@echo off
setlocal EnableDelayedExpansion
.
for /f "skip=3 tokens=1,*" %%i in %source% do (  
	echo %%i %%j %%k-%%l %%m-%%n-%%o-%%p>>G:\Muster.txt

Ich lasse also somit den Befehlsintero. die %%variablen in eiger Regie erstellen.

Die Ausgabe in das Muster.txt hat sich damit (warum überhaupts) generell verändert:
Love You for Life 10:39 PM %k-%l %m-%n-%o-%p
Three Plus %k-%l %m-%n-%o-%p


Auch diese Ausgabe ist irgendwie nicht ganz richtig.

Frage dazu:
1. Wenn FOR /F als Standard-Delims das Leerzeichen und Tab als Trennzeichen verwendet sowie aufeianderfolgende Trennzeichen (hier das Leerzeichen) warum werden dann doch in Zeile 1 des Musters vor der Uhrzeit diese vielen leerzeichen ausgegeben, anders wie bei Versuch 1 oben.
2. wie bringe ich nun die For /f-Schleife dazu mir nur "vorhandene" %%VAriablen auszugeben? ein laufendes If Exist %%* pro %%Variable ist wohl nicht die feine Art un die beiden letzten Tokens (mit Uhrzeit und AM/PM würde ich auch nicht brauchen
3. Wieso befinden sich zw. %k und %l (in Ascii 2D) Bindestrich? <-- EDIT: ich habs doch so in der Syntax oben angeschafft.. face-smile

Mit besten Grüßen
Heinze

Content-Key: 569544

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

Printed on: May 6, 2024 at 12:05 o'clock

Member: TK1987
TK1987 May 06, 2020, updated at May 08, 2020 at 06:17:35 (UTC)
Goto Top
Moin,

Zitat von @Heinze:
Jage ich nun das txt durch einen for /F-loop:
for /f "skip=3 tokens=1,2,3,4,5,6,8,9" %%i in %source% do (  
> 	echo %%i %%j %%k-%%l %%m-%%n-%%o-%%p>>G:\Muster.txt

erhalte ich folgenden Output:
Die ersten 2 Zeilen:
Love You for-Life 10:39-PM--
Three Plus - ---

Eigentlich würde ich erwarten:
Love You for Life 10:39 PM--
Three Plus------


Wo liegt der Fehler im Script?
zuerst mal, statt tokens=1,2,3,4,5,6,8,9 kannst du auch einfach tokens=1-9 verwenden.

Der Fehler liegt in deiner Erwartung. Wenn du mit %%i anfängst, heisst das für die erste zeile:
%%i=Love
%%j=You
%%k=for
%%l=Live
%%m=10:39
%%n=PM
in %%o und %%p steht nichts mehr.
Der Output den du bekommst ist also korrekt.
B. In der zweiten Zeile Lücken zwischen den „Strichen“ sind
- --- ist statt ------?
Du hast in deinem echo-Befehl ja auch Leerzeichen zwischen %%j und %%k, sowie zwischen %%l und %%m, die sind dann natürlich auch im Output.
Nach einmal drüber schlafen habe ich folgende Änderungen in der Syntax der FOR /-Schleife vorgenommen:
@echo off
setlocal EnableDelayedExpansion
.
for /f "skip=3 tokens=1,*" %%i in %source% do (  
	echo %%i %%j %%k-%%l %%m-%%n-%%o-%%p>>G:\Muster.txt
	)

Ich lasse also somit den Befehlsintero. die %%variablen in eiger Regie erstellen.

Die Ausgabe in das Muster.txt hat sich damit (warum überhaupts) generell verändert:
Love You for Life                                                                        10:39 PM %k-%l %m-%n-%o-%p
Du hast da etwas Grundlegend missverstanden. Mit "Tokens=1,*" sagst du, dass das erste Token in %%i geschrieben wird und alles was dahinter kommt wird ohne Trennung in %%j geschrieben. %%k-%%p sind dann überhaupt nicht mehr definiert.
Inhalt also wieder für die erste Zeile:
%%i=Love
%%j=You for Life                                                                        10:39 PM

Gruß Thomas
Member: Heinze
Heinze May 07, 2020 at 07:27:25 (UTC)
Goto Top
Hallo TK1987

du hast recht das mit den Tokens=1,* das hab ich voll missverstanden

Du hast da etwas Grundlegend missverstanden. Mit "Tokens=1,*" sagst du, dass das erste Token in %%i geschrieben wird und alles was dahinter kommt wird ohne Trennung in %%j geschrieben. %%k-%%p sind dann überhaupt nicht mehr definiert.


Danke für Deine Hilfe
Gruss Heinze