Top-Themen

Aktuelle Themen (A bis Z)

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

In Textdatei nach String suchen und diesen als Variable weiterverarbeiten

Frage Entwicklung Perl

Mitglied: hoko

hoko (Level 1) - Jetzt verbinden

09.10.2014, aktualisiert 10.10.2014, 1511 Aufrufe, 4 Kommentare

Hallo,

Ich möchte in einem Pelrscript eine Textdatei nach einem String durchsuchen und diesen dann weiterverarbeiten.
Der zu suchende Bereich ist vorne und hinten durch "#" begrenzt. Der Text wird anscheinend auch gefunden, aber ich bekomme als Ergebnis (TEXT1) aber nur 1 angezeigt.
Es sollte aber die Koordinate - in diesem Fall N50°06.44E008°40.30 als TEXT1 übergeben werden.


Hier mein Scriptentwurf
01.
#!/usr/bin/perl 
02.
use utf8; 
03.
use strict; 
04.
use warnings; 
05.
 
06.
open (FH, "meldung.txt"); 
07.
undef $/; 
08.
my $TEXT=<FH>; 
09.
if ($TEXT =~ /#(.+?)#/) { 
10.
print "Text gefunden" 
11.
12.
my $TEXT1 = $TEXT =~ /#(.+?)#/; 
13.
print $TEXT1; 
14.
 
15.
close FH;  
16.
 
Die Textdatei meldung.txt sieht in etwa so aus:
01.
123445894 
02.
erfsafoaeierowuft9pastrhjw 
03.
e9ru234234 
04.
ierohwe8frhz0z8hrdf 
05.
dfhaodfh: #N50°06.44E008°40.30# 
06.
he8r0er 
07.
 
08.
8erhz 2345r7´0 
09.
 
10.
dhferz3r 
11.
 
Danke & Gruß
hoko
Mitglied: colinardo
LÖSUNG 09.10.2014, aktualisiert 10.10.2014
Hallo hoko,
aber ich bekomme als Ergebnis (TEXT1) aber nur 1 angezeigt.
Deine Zeile:
my $TEXT1 = $TEXT =~ /#(.+?)#/; 
macht ja nur einen Vergleich, der eben 1 (True) zurückliefert wenn ein Match gefunden wurde. Der Submatch wird bei jedem Vergleich in der Variablen $1 gespeichert, wobei 1 die Nummer des Submatches ist.

Für ein Pattern-Matching mit dem Submatch als Ergebnis kannst du es also so machen:
01.
my $TEXT1; 
02.
if ($TEXT =~ m/#(.+?)#/) { 
03.
  $TEXT1 = $1; 
04.
  print $TEXT1; 
05.
}
oder wenn du nicht mit den globalen Variablen $x arbeiten willst lässt sich das Ergebnis auch direkt einer Liste zuweisen.
($TEXT1) = $TEXT =~ m/#(.+?)#/;
Du könntest damit auch so etwas machen:
($LAT,$LNG) = $TEXT =~ m/#([NS][^EW]+)([EW].+?)#/;
um Breiten- und Längengrad direkt separaten Variablen zu zuweisen.

Grüße Uwe
Bitte warten ..
Mitglied: hoko
10.10.2014 um 10:21 Uhr
Hallo Uwe,

vielen Dank. Das leuchtet ein.

Wenn ich aber jetzt mehrere Teilen aus der Datei übergeben möchte:

01.
my $FILE = "$ARGV[0]";    # Datei wird beim Start mitgegeben 
02.
open (FH, $FILE); 
03.
undef $/; 
04.
my $TEXT=<FH>; 
05.
 
06.
my $TEXT1= $TEXT =~ /#(.+?)#/; 
07.
$TEXT1= $1; 
08.
print $TEXT1; 
09.
 
10.
my $TEXT2= $TEXT =~ /110          :(.*)/; 
11.
$TEXT2 = $1; 
12.
print $TEXT2; 
13.
 
14.
######################## 
15.
#usw. mit diversen Abfragen. 
bekomme ich ja jedesmal nur $1 also die Koordinate als $TEXT1 und $TEXT2 angezeigt. Wird die nicht überschrieben oder
Kannst du mir sagen, wie ich das lösen kann?

Vielen Dank & Gruß
hoko
Bitte warten ..
Mitglied: colinardo
LÖSUNG 10.10.2014, aktualisiert um 12:45 Uhr
Zitat von hoko:
Wenn ich aber jetzt mehrere Teilen aus der Datei übergeben möchte:
Dazu musst du den Modifizierer g = Global für den Regex Part verwenden und dann das Ergebnis einem Array zuweisen, welches du dann mit einer Schleife durchläufst.
Ohne den Modifizierer g wird ansonsten immer nur der erste gefundene Match zurückgeliefert.
01.
@matches  = ($TEXT =~ m/#(.+?)#/g); 
02.
$i = 0; 
03.
while ($i <= $#matches){ 
04.
  print "$matches[$i++]\n"; 
05.
}
$#matches liefert die Anzahl an Array-Elementen. Zur Arbeit mit Listen und Arrays siehe: http://www.perlboard.de/perlguide/Kap04.html
$matches[$i++] gibt das jeweilige Array-Element aus und inkrementiert in einem Schritt die Laufvariable $i++.

Grüße Uwe
Bitte warten ..
Mitglied: hoko
10.10.2014 um 12:45 Uhr
Danke das war es.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Powershell In Textdatei Nach bestimmter Zeichenfolgen in String suchen und diese Strings dann löschen
gelöst Frage von PinkFLuffyUnicornBatch & Shell5 Kommentare

Hi, ich habe folgendes Vorhaben: Ich muss die Logdateien von dem Minecraftserver eines Freundes Nach bestimmten Zeichenfolgen in den ...

Batch & Shell
Teil eines Strings als Variable setzen
gelöst Frage von tHe-jAyBatch & Shell2 Kommentare

Hallo, für ein kleines Batch-Script benötige ich einen Servicenamen als Variable. Den Servicenamen frage ich über folgenden Befehl ab: ...

Batch & Shell
Datei in Ordner mit Batchdatei suchen und weiterverarbeiten
gelöst Frage von MichaelWiggenBatch & Shell2 Kommentare

Hallo zusammen, ich wurde mit der Thematik Batch Dateien zu erstellen ins Kalte Wasser geworfen. Es geht um folgendes: ...

Batch & Shell
Entfernen eines Strings vor einem bestimmten Zeichens in einer Textdatei
gelöst Frage von Privex007Batch & Shell3 Kommentare

Hallo an alle Coder, ich habe Probleme mit dem extrahieren eines String aus einer "txt"-Datei. Ich habe folgende Zeilen ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 8 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 10 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...