aus Dateien Strings auslesen
Hallo,
ich soll mehrere Dateien georeferenzieren. Die Infos dazu stehen in Info-Dateien die bis auf die Endung wie die Rasterdatei heißen. Für die Georefenzierung werden 2 Strings aus der Info-Datei benötigt und einige Standardwerte hinzugefügt.
Der Aufbau einer Info-Datei[5050.ifo] (vereinfacht):
NW-Ecke: 111111111 22222222
NO-Ecke: 33333333 444444444
SW-Ecke: 55555555 666666666
SO-Ecke: 77777777 888888888
Die neu zu erstellende Datei muß folgendermaßen aussehen[5050.tfw]:
22222222
-88888888
Das ganze soll für alle Dateien in einem Verzeichniss erfolgen. Ich gehe davon aus, das ich dafür eine For /r Schleife durch alle ifo-Dateien brauche und hieraus eine Prozedur aufrufen muss, die durch alle Strings geht. (Oder kann man Schleifen doch irgendwie schachteln).
Wie kann ich auf den dritten Wert in einer Zeile zugreifen? Wenn ich das probeweise mit einer Datei mache, kann ich immer nur auf den ersten Wert zugreifen
ich soll mehrere Dateien georeferenzieren. Die Infos dazu stehen in Info-Dateien die bis auf die Endung wie die Rasterdatei heißen. Für die Georefenzierung werden 2 Strings aus der Info-Datei benötigt und einige Standardwerte hinzugefügt.
Der Aufbau einer Info-Datei[5050.ifo] (vereinfacht):
NW-Ecke: 111111111 22222222
NO-Ecke: 33333333 444444444
SW-Ecke: 55555555 666666666
SO-Ecke: 77777777 888888888
Die neu zu erstellende Datei muß folgendermaßen aussehen[5050.tfw]:
22222222
-88888888
Das ganze soll für alle Dateien in einem Verzeichniss erfolgen. Ich gehe davon aus, das ich dafür eine For /r Schleife durch alle ifo-Dateien brauche und hieraus eine Prozedur aufrufen muss, die durch alle Strings geht. (Oder kann man Schleifen doch irgendwie schachteln).
Wie kann ich auf den dritten Wert in einer Zeile zugreifen? Wenn ich das probeweise mit einer Datei mache, kann ich immer nur auf den ersten Wert zugreifen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 24219
Url: https://administrator.de/forum/aus-dateien-strings-auslesen-24219.html
Ausgedruckt am: 27.12.2024 um 06:12 Uhr
5 Kommentare
Neuester Kommentar
Moin Gloem,
die Schwierigkeit ist nicht in den FOR..IN..DO-Anweisungen, die sind in diesem Fall eher einfach.
Ein undokumentiertes CMD-Feature bzw. CMD-Verhalten aus meinem geplanten Batch-Tut IV muss ich vorziehen wegen Dir: Es lassen sich eigentlich die Ziffern 0-5 nicht per ECHO ausgeben (sind für die CMD.exe ja die Kanäle 1=CON.. bis 5=STDAUX... und 0 ist ein M$-Bug).
Also, Skizze:
-->Ergebnis z.B. eine 5050.tfw mit dem Inhalt:
22222222
888888888
HTH Biber
die Schwierigkeit ist nicht in den FOR..IN..DO-Anweisungen, die sind in diesem Fall eher einfach.
Ein undokumentiertes CMD-Feature bzw. CMD-Verhalten aus meinem geplanten Batch-Tut IV muss ich vorziehen wegen Dir: Es lassen sich eigentlich die Ziffern 0-5 nicht per ECHO ausgeben (sind für die CMD.exe ja die Kanäle 1=CON.. bis 5=STDAUX... und 0 ist ein M$-Bug).
Also, Skizze:
::---snipp ifo2tfw.bat
@echo off & setlocal
for %%a in (*.ifo) do (
echo aus Datei %%a:
for /F "tokens=3 skip=2" %%i in ('find "NW-Ecke" %%a') do @echo %%i >%%~na.tfw
echo ^0>>%%~na.tfw
echo ^0>>%%~na.tfw
for /F "tokens=3 skip=2" %%i in ('find "SO-Ecke" %%a') do @echo %%i >%%~na.tfw>>%%~na.tfw
)
::---snapp ifo2tfw.bat
-->Ergebnis z.B. eine 5050.tfw mit dem Inhalt:
22222222
888888888
HTH Biber
Moin Gloem,
habe die Frage nur zum Teil verstanden. Nachfragen:
a) wie identifizierst Du denn die "Skalierungsfaktor"-Zeile
b) wie sieht die Zeile aus? Oder auf bätchisch: welches Token davon brauchst Du?
c) Dein Beispiel "Vorher 2,50m -> Nachher 2,500" ... ööhm.., bei "Vorher" steht IMMER "m" am Ende und wird IMMER durch die Ziffer "0" ersetzt? Oder welche Fälle/Use Cases gibt es noch?
Grüße Biber
habe die Frage nur zum Teil verstanden. Nachfragen:
a) wie identifizierst Du denn die "Skalierungsfaktor"-Zeile
b) wie sieht die Zeile aus? Oder auf bätchisch: welches Token davon brauchst Du?
c) Dein Beispiel "Vorher 2,50m -> Nachher 2,500" ... ööhm.., bei "Vorher" steht IMMER "m" am Ende und wird IMMER durch die Ziffer "0" ersetzt? Oder welche Fälle/Use Cases gibt es noch?
Grüße Biber
Also dann, Gloem,
für das Wechseln/Ersetzen ist es nötig, dass dieser Wert in einer "echten" Variablen zwischengespeichert wird.
Bisher steht der Wert ja in einer so genannten Zählvariablen (%%i) - eine Zählvariable kann ich nicht manipulieren.
Also ersetze in der Zeile, die bisher den "Skalierungsfaktor" liefert (das waren meine Fragen a) und b)):
for /F "tokens=3 skip=2" %%i in ('find "Skalierung" %%a') do @echo %%i >%%~na.tfw
das "DO @echo %%i" durch einen Unteraufruf ....DO Call :WriteSkaFaktor %%i %%~na.tfw
for /F "tokens=3 skip=2" %%i in ('find "Skalierung" %%a') DO (
Call :WriteSkaFaktor %%i %%~na.tfw)
In dem angepassten Batchschnipsel sieht es dann in etwa so aus
HTH Biber
für das Wechseln/Ersetzen ist es nötig, dass dieser Wert in einer "echten" Variablen zwischengespeichert wird.
Bisher steht der Wert ja in einer so genannten Zählvariablen (%%i) - eine Zählvariable kann ich nicht manipulieren.
Also ersetze in der Zeile, die bisher den "Skalierungsfaktor" liefert (das waren meine Fragen a) und b)):
for /F "tokens=3 skip=2" %%i in ('find "Skalierung" %%a') do @echo %%i >%%~na.tfw
das "DO @echo %%i" durch einen Unteraufruf ....DO Call :WriteSkaFaktor %%i %%~na.tfw
for /F "tokens=3 skip=2" %%i in ('find "Skalierung" %%a') DO (
Call :WriteSkaFaktor %%i %%~na.tfw)
In dem angepassten Batchschnipsel sieht es dann in etwa so aus
::---snipp ifo2tfw.bat
@echo off & setlocal
for %%a in (*.ifo) do (
echo aus Datei %%a:
for /F "tokens=3 skip=2" %%i in ('find "NW-Ecke" %%a') do @echo %%i >%%~na.tfw
<b>for /F "tokens=3 skip=2" %%i in ('find "Skalierung" %%a') DO Call :WriteSkaFaktor %%i %%~na.tfw</b>
REM echo ^0>>%%~na.tfw
echo ^0>>%%~na.tfw
for /F "tokens=3 skip=2" %%i in ('find "SO-Ecke" %%a') do @echo %%i >>%%~na.tfw
)
:WriteSkaFaktor
Set "Scale=%1"
Set Scale=%Scale:m=0%"
Echo %Scale% >>%2
goto :eof
::---snapp ifo2tfw.bat
HTH Biber