Thread substr, strings hinzufügen innerhalb Schleife (4 answers)
Opened by ruco at 2013-08-16 07:21

Raubtier
 2013-08-16 08:20
#169593 #169593
User since
2012-05-04
1070 Artikel
BenutzerIn
[default_avatar]
2013-08-16T05:21:35 ruco
Guten Morgen!

Ich habe eine Frage zu substr. Wenn ich in einer Schleife (abhängig von der Länge des Strings), einen String bearbeite, indem ich Teile lösche funktioniert das soweit ganz gut.

Wenn ich aber in der gleichen Schleife versuche dem String Zeichen hinzuzufügen führt das mit unter zu einer Endlosschleife. Irgendwie ist das auch verständlich, dass das nicht so einfach funktionieren kann, denn am Anfang wird ja die Länge des Strings bestimmt, die sich dann ja ändert. Nur warum kommt dann eine Endlosschleife zustande? Gibts eine einfache Lösung?

Code: (dl )
1
2
3
4
	
sub loeschen() {
my $f_content = $_[0];
my $c_number = $_[1];


Hier geht es schon los. In der ersten Zeile legst du fest, dass die Funktion keine Parameter bekommen soll. Dann nimmst du aber doch zwei.
Das geht nur, wenn du die Funktion mit &, das den Prototypen umgeht, aufrufst.

Besser:
Code (perl): (dl )
1
2
sub loeschen {
        my ($f_content, $c_number) = @_;

Und dann die Funktion ohne & aufrufen.
Noch besser wäre natürlich auch noch ein anderer Funktionsname.


Quote
Code: (dl )
1
2
3
4
5
6
7
8
9
	my $state = "ok";

my $pos = 0;
my $record;

while ( ($pos+12) < length($f_content)) {
$record = substr($f_content,$pos+3,4);

if ($record == "2500" || $record == "2800") { substr($f_content,$pos,128, ""); } # löschen funktioniert

Sicher, dass das so ok ist? Du löscht 128 Zeichen, aber machst dann trotzdem $pos += 128, d.h. du überspringst den Datensatz danach. Gewollt?

Quote
Code: (dl )
		if ($record == "1500" || $record == "1800") { substr($f_content,$pos,128, 0, " " x 128); } # einfügen nicht


Substr mit 5 Argumenten? Ich kenne nur 4 Argumente.

Quote
Code: (dl )
1
2
3
4
5
		$pos += 128;
}

return $f_content, $state;
}


Ich würde mal zu Debug-Zwecken vor+nach jedem substr-Befehl mir die Variablen record, f_content und pos ausgeben. Damit solltest du dann sehen, wo der Fehler auftritt.

Noch eine Bemerkung: es ist oft einfacher, über einen konstanten String zu loopen und den neuen String mit den Ersetzungen komplett neu zu erstellen. Ewas zu verändern, über das man loopt, ruft nach Ärger.
Last edited: 2013-08-16 08:38:50 +0200 (CEST)

View full thread substr, strings hinzufügen innerhalb Schleife