xasher
Goto Top

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:

@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

Content-Key: 139593

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

Printed on: April 23, 2024 at 06:04 o'clock

Member: Biber
Biber Mar 31, 2010 at 11:09:05 (UTC)
Goto Top
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:
..
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
Member: xasher
xasher Mar 31, 2010 at 11:19:22 (UTC)
Goto Top
Hallo Biber,

danke für die schnelle Antwort. Jetzt hab ichs so gemacht, auch die For Schleife nach deinem Beispiel angepasst.

Am Bild laufen jetzt die Zeilen runter. Allerdings löst er die !ANZ! nicht auf

Zeilen in neu_10032901.CSV: !ANZ!
Zeilen in neu_10032901.CSV: !ANZ!
Zeilen in neu_10032901.CSV: !ANZ!
Zeilen in neu_10032901.CSV: !ANZ!

Hast du eine Idee was das ist?
Member: bastla
bastla Mar 31, 2010 at 12:04:55 (UTC)
Goto Top
Hallo xasher!

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  

)
Grüße
bastla
Member: xasher
xasher Mar 31, 2010 at 12:06:47 (UTC)
Goto Top
super danke euch! Bin wirklich froh, dass es tut. Hatte da einen Schreibfehler drin. Ich sitz schon seit Stunden über diesem Script, da fallen einem die Fehler nicht mehr auf Anhieb auf.

Danke euch für eure Mühe.

Gruß
xasher