Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Variablen verwenden nach auslesen aus Datei

Frage Entwicklung Batch & Shell

Mitglied: xasher

xasher (Level 1) - Jetzt verbinden

31.03.2010 um 12:24 Uhr, 3607 Aufrufe, 4 Kommentare

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:

01.
@echo off & setlocal enabledelayedexpansion  
02.
FOR /F "tokens=*" %%a IN ('DIR *.CSV /B') DO ( 
03.
     
04.
  : mit sed die NUL-Zeichen entfernen, damit man die Anzahl der Zeilen rausbekommt 
05.
  sed s/\x0//g > "neu_%%a" "%%a" 
06.
   
07.
  : Anzahl der Zeilen in Datei schreiben 
08.
  find /v /c "&*fake&*" neu_%%a > dummy.txt   
09.
 
10.
 
11.
 
12.
  FOR /F "skip=1 tokens=3 delims=: " %%i IN (dummy.txt) DO @( 
13.
    set /a "ANZ=%%i/100*10" 
14.
    : ANz anzeigen 
15.
    echo %ANZ% 
16.
17.
     
18.
    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 
19.
    pause   
20.
    
21.
)


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
Mitglied: Biber
31.03.2010 um 13:09 Uhr
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:
01.
.. 
02.
FOR /F "tokens=*" %%a IN ('DIR *.CSV /B') DO (  
03.
... 
04.
.... 
05.
              FOR /F "delims=:" %%i in ('FindStr /n "^" .neu_%%a') do ( 
06.
                   set /a "ANZ=%%i/100*10"  
07.
                    echo Zeilen in neu_%%a:  !ANZ! 
08.
09.
..... 
10.
... 
11.
12.
...
Grüße
Biber
Bitte warten ..
Mitglied: xasher
31.03.2010 um 13:19 Uhr
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?
Bitte warten ..
Mitglied: bastla
31.03.2010 um 14:04 Uhr
Hallo xasher!

Auf Basis Deines Ansatzes (aber ungetestet):
01.
@echo off & setlocal enabledelayedexpansion  
02.
FOR /F "tokens=*" %%a IN ('DIR *.CSV /B') DO ( 
03.
 
04.
    : mit sed die NUL-Zeichen entfernen, damit man die Anzahl der Zeilen rausbekommt 
05.
    sed s/\x0//g > "neu_%%a" "%%a" 
06.
 
07.
    : Anzahl der Zeilen in Datei schreiben 
08.
    for /f %%i in find /v /c "&*fake&*"<"neu_%%a" do set /a ANZ=%%i/100*10 
09.
 
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 
11.
    pause   
12.
 
13.
)
Grüße
bastla
Bitte warten ..
Mitglied: xasher
31.03.2010 um 14:06 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Batch & Shell
gelöst PowerShell, Log Datei auslesen, bei Änderungen E-Mail senden (12)

Frage von swissbull zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...