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, 4111 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
Microsoft

Microsoft Telefonaktivierungs App

(17)

Tipp von alik47 zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Heiß diskutierte Inhalte
Google Android
gelöst Android-Handy versehentlich (dauerhaft) gesperrt? (18)

Frage von FA-jka zum Thema Google Android ...

Batch & Shell
gelöst Ordner und Datei Name gleich (BATCH) (12)

Frage von clragon zum Thema Batch & Shell ...

DSL, VDSL
gelöst DSL 200m verlängern (11)

Frage von Angela44 zum Thema DSL, VDSL ...

Windows Server
SBS 2011 Standard virtualisieren (11)

Frage von HeinrichM zum Thema Windows Server ...