Variablen verwenden nach auslesen aus Datei
Hallo zusammen,
ich seh gerade den Wald vor lauter Bäumen nicht mehr. Ich bin gerade dabei meine GPS Daten aufzubereiten.
Diese werden in mehreren CSV-Dateien gespeichert. Mit einem externen Tool (GPSBabel) will ich den Datenbestand
auf 10% reduzieren, da diese Werte durchaus genügen um ein der Karte ein Route darzustellen.
Wider besseren Wissens gehe ich wie folgt vor:
1. Dateien aus dem Verzeichnis auslesen
2. Steuerzeichen entfernen
3. Die Anzahl der Zeilen in eine dummy.txt schreiben
4. In der zweiten For Schleife die Anzahl in eine Variable schreiben bzw. 10% davon
5. GPSBabel aufrufen und denWert aus Variable ANZ übergeben
Hier mal den Code:
Jetzt passiert folgendes: Beim ersten Aufruf der Batch Datei zeigt er im echo %ANZ% garnichts an und bei den weiteren Aufrufen immer nur denselben Wert obwohl ich schon während des Ablaufs in die dummy.txt geschaut habe und dort unterschiedliche Werte drin standen.
Ich weiß gerade nicht mehr weiter. Zugegeben. Die Krücke mit dem Datei schreiben und auslesen in eine Variable ist da bestimmt nicht von Vorteil. Bin daher auch für eine andere Vorgehensweise offen.
Danke euch mal schon vorab.
Gruß
xasher
ich seh gerade den Wald vor lauter Bäumen nicht mehr. Ich bin gerade dabei meine GPS Daten aufzubereiten.
Diese werden in mehreren CSV-Dateien gespeichert. Mit einem externen Tool (GPSBabel) will ich den Datenbestand
auf 10% reduzieren, da diese Werte durchaus genügen um ein der Karte ein Route darzustellen.
Wider besseren Wissens gehe ich wie folgt vor:
1. Dateien aus dem Verzeichnis auslesen
2. Steuerzeichen entfernen
3. Die Anzahl der Zeilen in eine dummy.txt schreiben
4. In der zweiten For Schleife die Anzahl in eine Variable schreiben bzw. 10% davon
5. GPSBabel aufrufen und denWert aus Variable ANZ übergeben
Hier mal den Code:
@echo off & setlocal enabledelayedexpansion
FOR /F "tokens=*" %%a IN ('DIR *.CSV /B') DO (
: mit sed die NUL-Zeichen entfernen, damit man die Anzahl der Zeilen rausbekommt
sed s/\x0//g > "neu_%%a" "%%a"
: Anzahl der Zeilen in Datei schreiben
find /v /c "&*fake&*" neu_%%a > dummy.txt
FOR /F "skip=1 tokens=3 delims=: " %%i IN (dummy.txt) DO @(
set /a "ANZ=%%i/100*10"
: ANz anzeigen
echo %ANZ%
)
echo gpsbabel -w -t -i v900 -f %%a -x track,course,speed,pack -x duplicate,location -x position,distance=5M -x simplify,count=%ANZ% -o unicsv -F neu_%%a
pause
)
Jetzt passiert folgendes: Beim ersten Aufruf der Batch Datei zeigt er im echo %ANZ% garnichts an und bei den weiteren Aufrufen immer nur denselben Wert obwohl ich schon während des Ablaufs in die dummy.txt geschaut habe und dort unterschiedliche Werte drin standen.
Ich weiß gerade nicht mehr weiter. Zugegeben. Die Krücke mit dem Datei schreiben und auslesen in eine Variable ist da bestimmt nicht von Vorteil. Bin daher auch für eine andere Vorgehensweise offen.
Danke euch mal schon vorab.
Gruß
xasher
Please also mark the comments that contributed to the solution of the article
Content-Key: 139593
Url: https://administrator.de/contentid/139593
Printed on: April 23, 2024 at 06:04 o'clock
4 Comments
Latest comment
Moin xasher,
der kleine Fehler liegt im "verzögerten Variablenauflösen", das du ja richtig vorbereitet hast mit der Klausel "SetLocal EnableDelayedExpansion".
Das ist die notwendige Bedingung.
Welche der Variablen du nun tatsächlich "verzögert" auflösen willst, das musst durch die Verwendung der Schreibweise !Variablennamen! statt %Variablennamen% kundtun.
Erst dann hast du notwendige und hinreichende< Bedingungen.
Kürzer geschrieben - du müsstest oben in zeile 15 und Zeile 18 jeweils !ANZ! statt %ANZ% schreiben.
Die Ermittlung der Anzahl Zeilen der "neu_%%a"-dateien würde ich allerdings ohne temporäre Datei dummy.txt durchziehen.
Beispiel:
Grüße
Biber
der kleine Fehler liegt im "verzögerten Variablenauflösen", das du ja richtig vorbereitet hast mit der Klausel "SetLocal EnableDelayedExpansion".
Das ist die notwendige Bedingung.
Welche der Variablen du nun tatsächlich "verzögert" auflösen willst, das musst durch die Verwendung der Schreibweise !Variablennamen! statt %Variablennamen% kundtun.
Erst dann hast du notwendige und hinreichende< Bedingungen.
Kürzer geschrieben - du müsstest oben in zeile 15 und Zeile 18 jeweils !ANZ! statt %ANZ% schreiben.
Die Ermittlung der Anzahl Zeilen der "neu_%%a"-dateien würde ich allerdings ohne temporäre Datei dummy.txt durchziehen.
Beispiel:
..
FOR /F "tokens=*" %%a IN ('DIR *.CSV /B') DO (
...
....
FOR /F "delims=:" %%i in ('FindStr /n "^" .neu_%%a') do (
set /a "ANZ=%%i/100*10"
echo Zeilen in neu_%%a: !ANZ!
)
.....
...
)
...
Grüße
Biber
Hallo xasher!
Auf Basis Deines Ansatzes (aber ungetestet):
Grüße
bastla
Auf Basis Deines Ansatzes (aber ungetestet):
@echo off & setlocal enabledelayedexpansion
FOR /F "tokens=*" %%a IN ('DIR *.CSV /B') DO (
: mit sed die NUL-Zeichen entfernen, damit man die Anzahl der Zeilen rausbekommt
sed s/\x0//g > "neu_%%a" "%%a"
: Anzahl der Zeilen in Datei schreiben
for /f %%i in find /v /c "&*fake&*"<"neu_%%a" do set /a ANZ=%%i/100*10
echo gpsbabel -w -t -i v900 -f %%a -x track,course,speed,pack -x duplicate,location -x position,distance=5M -x simplify,count=!ANZ! -o unicsv -F neu_%%a
pause
)
bastla