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

Werte filtern und in neue Datei schreiben mit Batch

Frage Entwicklung Batch & Shell

Mitglied: fabmeister19

fabmeister19 (Level 1) - Jetzt verbinden

29.04.2010 um 15:04 Uhr, 4110 Aufrufe, 12 Kommentare

Hallo,
ich habe folgendes Problem: Ich habe als Grundlage ein ASCII-File in dem über 1.6 Mio Punkte in folgender Form vorhanden sind:

4494350.50 5755800.50 52.85
4494450.50 5756800.50 52.85
4494650.50 5757800.50 52.85

Dabei beschreibt der erste Wert den Rechtswert, der zweite den Hochwert und der dritte die Höhe. Nun hab ich folgendes Problem: Für mein digatales Geländemodell benötige ich von den 1.6 Millionen Punkten nur einen bestimmten Wertebereich.

Umgangssprachlich würde ich es folgendermaßen ausdrücken:

WENN RECHTSWERT größer als 4494350.50 UND HOCHWERT größer als 5755800.50 dann
SCHREIBE ZEILE IN ZIELDATEI.TXT
SONST LIES NÄCHSTE ZEILE

Ich möchte also mit if-Abfragen bestimmte Zeilen aus der ASCII - Datei filtern und diese in eine neue ASCII Datei schreiben, dabei soll er immer die aktuell gefundene Zeile an die jetzige anhängen.

Über eure Antworten würde ich mich freune und bedanke mich schonmal im Voraus.
Mitglied: maretz
29.04.2010 um 15:17 Uhr
Muss das ne Dos-Batch sein oder gehen auch Scriptsprachen wie Perl? Weil dann wäre es zimlich simpel -> gucken ob die erste Zahl im Bereich liegt -> wenn ja die Zeile in nen Array schreiben. Am ende der File die Quelldatei schliessen, ne neue Datei erstellen/öffnen und den Inhalt des Arrays da reinpumpen...
Bitte warten ..
Mitglied: Snowman25
29.04.2010 um 15:23 Uhr
Darf ich fragen, mit welchem Programm du arbeitest? (ArcGIS, etc.? )
Bitte warten ..
Mitglied: LotPings
29.04.2010 um 15:34 Uhr
Hallo fabmeister19,

kein Problem mit Batch vielleicht nicht superschnell.

01.
@Echo off 
02.
Set InFile=Test.asc 
03.
Set OutFile=Out.txt 
04.
 
05.
:: UNTEN  LINKS: (4494350.50 ; 5755800.50) = MinX,MinY 
06.
:: OBEN  RECHTS: (4494930.50 ; 5756000.50) = MaxX,MaxY 
07.
 
08.
Set MinX=4494350.50 
09.
Set MaxX=4494930.50 
10.
Set MinY=5755800.50 
11.
Set MaxY=5755800.50 
12.
 
13.
For /f "delims=" %%A in (%InFile%) Do Call :Check %%A 
14.
Goto :Eof 
15.
:Check 
16.
Echo All %* 
17.
if %1 LSS %MinX% goto :eof 
18.
if %1 GTR %MaxX% goto :eof 
19.
if %2 LSS %MinY% goto :eof 
20.
if %2 GTR %MaxY% goto :eof 
21.
Echo --- %* 
22.
>> %OutFile% Echo.%*
zu Testzwecken gebe ich zusätzlich alle Zeilem aus

Gruß
LotPings

Edit: Ich habe die X,Y Min,Max etwas eindeutiger formuliert
Bitte warten ..
Mitglied: fabmeister19
29.04.2010 um 15:35 Uhr
naja womit man das realisiert ist mir eigentlich egal. aber nur zu gucken ob die erste zahl im bereich liegt würde glaub ich nicht ausreichen, weil es gibt Punkte die haben gleiche Rechtswerte, aber unterschiedliche Hochwerte, aber wenn ich meinen Wertebereich mit nem Rechteck oder so ähnlich definiert habe, dann hätte ich ja den Wertebereich.
Bitte warten ..
Mitglied: fabmeister19
29.04.2010 um 15:37 Uhr
ja mit ArcGiS auch aber irgendwie will er die datei nicht importieren. in dem speziellen Falle aber nicht. auch umbennen etc hat nicht funktioniert.
Bitte warten ..
Mitglied: fabmeister19
29.04.2010 um 15:42 Uhr
ok danke ich teste das mal. Ich hab vorhin noch was vergessen, ich müsste überprüfen ob die Werte Rechts und Hoch größer sind als irgendwas aber gleichzeitig kleiner als nen anderer Wert.

ALSO für alle mal zum Verständnis ich habe mir ein Rechteck definiert mit folgenden Koordinaten:

OBEN LINKS: (4494350.50 ; 5756000.50)
UNTEN LINKS: (4494350.50 ; 5755800.50)
OBEN RECHTS: (4494930.50 ; 5756000.50)
UNTEN RECHTS: (4494930.50 ; 5755800.50)

In dem Bereich müssten also alle Zeilen liegen die ich in meine gefilterte Datei schreiben möchte.
Bitte warten ..
Mitglied: Snowman25
29.04.2010 um 15:47 Uhr
Tausche
01.
If %1 LEQ 4494350.50 Goto :Eof  
02.
If %2 LEQ 5755800.50 Goto :Eof
gegen
01.
If %1 GEQ 4494930.50 ( 
02.
  Goto :Eof 
03.
) else ( 
04.
  if %1 LEQ 4494350.50 ( 
05.
    Goto :Eof  
06.
07.
08.
If %2 GEQ 5756000.50 ( 
09.
  Goto :Eof 
10.
) else ( 
11.
  if %2 LEQ 5755800.50 ( 
12.
    Goto :Eof  
13.
14.
)
So sollte das passen..
Bitte warten ..
Mitglied: bastla
29.04.2010 um 16:29 Uhr
... obwohl:
01.
if %1 LSS 4494350.50 goto :eof 
02.
if %2 GTR 5756000.50 goto :eof 
03.
 
04.
if %1 GTR 4494930.50 goto :eof 
05.
if %2 LSS 5755800.50 goto :eof
wäre für mich übersichtlicher ...

Grüße
bastla
Bitte warten ..
Mitglied: Snowman25
29.04.2010 um 16:31 Uhr
hmm... stimmt eigentlich. Hab mal wieder Knoten im Hirn.
Bitte warten ..
Mitglied: fabmeister19
29.04.2010 um 19:19 Uhr
danke für eure schnelle Hilfe. Ich lass das mal durchlaufen und meld mich morgen nochmal ob es geklappt hat.
Bitte warten ..
Mitglied: LotPings
29.04.2010 um 19:45 Uhr
Hallo fabmeister19,

ich habe die vorgeschlagenen Änderungen oben direkt eingebaut und (hoffe ich) eindeutiger formuliert.

Gruß
LotPings
Bitte warten ..
Mitglied: fabmeister19
30.04.2010 um 07:08 Uhr
Super, ihr seid klasse!!! Hat funktioniert!
Danke vielmals!
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (10)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...