Array durchsuchen
steve
- perl
Hallo liebe Leut,
habe folgendes Problem: Ich habe eine Textdatei, wobei jede Zeile einem Datensatz entspricht. Getrennt sind die Felder mit dem Zeichen "|"
Nr. Vorname Nachname
1|stefan|meier
2|otto|mueller
3|sabine|bauer
4|heidi|bach
Nun muss ich z.B. zwischen Satz 3 und 4 einen weiteren einfügen.
Dieser neue Satz soll die Nummer 3.1 erhalten.
1|stefan|meier
2|otto|mueller
3|sabine|bauer
3.1|walter|jansen
4|heidi|bach
Nun kann es vorkommen, das wieder ein Satz zwischen 3 und 4 eingefügt werden muss. Dieser soll nun die Nummer 3.2 erhalten
1|stefan|meier
2|otto|mueller
3|sabine|bauer
3.1|walter|jansen
3.2|evi|albert
4|heidi|bach
Und wenn sowas gegeben ist:
1|stefan|meier
2|otto|mueller
3|sabine|bauer
3.1|walter|jansen
3.2|evi|albert
3.4|herman|otto
4|heidi|bach
Dann soll ein neuer Satz zwischen 3 und 4 die Nummer 3.5 haben.
Wie kann maan das elegant lösen?
Mein Versuch:
open(DATA, "<$daten") || die("can't open/read $daten, $!");
@allRec = <DATA>; # alle Daten in ein Array kopieren
foreach $dataRec (@allRec) # Array durchlaufen
{
($entry{"nr"},$rest) = split(/|/,$dataRec);
if ($entry{"nr"} ne $gFormCtrl{"commentTo"})
{
$foundID = 0;
push(@allRecTMP,$dataRec);
# nicht gefunden => Satz in Hilfsarray koieren
}
else
{
$foundID = 1;
# gefunden
}
}
Meine Frage: Wie kann man die nächste fortlaufenden Nummer finden?
Weiss jemand eine Lösung?
Danke,
Steve
Hi
if ($entry{"nr"} ne $gFormCtrl{"commentTo"})
{
$foundID = 0;
push(@allRecTMP,$dataRec);
# nicht gefunden => Satz in Hilfsarray koieren
}
else
{
$foundID = 1;
# gefunden
}
}
Meine Frage: Wie kann man die nächste fortlaufenden Nummer finden?
Was auch immer du da vor hast:
if($entry{"nr"}=~/^\d$/) {
$nextnumber = $entry{"nr"}.".1";
} else {
$entry{"nr"} =~ s/^(\d+.)(\d+)$/; # Die vollen Zahlen und zehntel splitten (Würde auch mit split gehen).
$nextnumber = $2 + 1; # Die alte zehntel plus 1/10.
$entry{"nr"}=$1.$nextnumber; # Und wieder zusammensetzen
}
Gruß
csx
Hi csx,
ja so einfach ist das nicht.
if($entry{"nr"}=~/^\d$/) {
$nextnumber = $entry{"nr"}.".1";
} else {
$entry{"nr"} =~ s/^(\d+.)(\d+)$/; # Die vollen Zahlen und zehntel splitten (Würde auch mit split gehen).
$nextnumber = $2 + 1; # Die alte zehntel plus 1/10.
$entry{"nr"}=$1.$nextnumber; # Und wieder zusammensetzen
}
Nimm das Beispiel:
1|stefan|meier
2|otto|mueller
3|sabine|bauer
3.1|walter|jansen
3.2|evi|albert
4|heidi|bach
Die Anwendug soll einen neuen Unterpunkt 3 einfügen. In diesem Beispiel nach 3.2
Der neue Satz soll somit die Nummer 3.3 haben.
Ich glaub ich hab die Lösung. Suchen im Array nach gesuchter Nummer+1
Dann Zeilennummer x-1 auslesen und dann deinen Code anwenden. Das müsste gehen!
Bye,
Steve
Hi
Die Anwendug soll einen neuen Unterpunkt 3 einfügen. In diesem Beispiel nach 3.2
Der neue Satz soll somit die Nummer 3.3 haben.
Ich glaub ich hab die Lösung. Suchen im Array nach gesuchter Nummer+1
Dann Zeilennummer x-1 auslesen und dann deinen Code anwenden. Das müsste gehen!
Ups, ich dachte dein Code den du gepostet hattest würde die betrffende Stelle suchen und in $entry{'nr'} speichern. Hätte ich mir doch etwas genauer angucken sollen :o)
Gruß
csx