![]() |
Probleme mit Insert? Stringbearbeitung!
Hallo,
ich bin etwas am verzweifeln. Bin mir gerade ein Hilsprogramm am basteln, welches mir eine Texdatei parsen tut und Telefonnummern in das gewünschte Format bringt. Zwischen Vorwahl und Rufnummer soll ein ' - ', also 'blank|Leerstelle|blank' stehen. Dachte mir dafür wäre ja die Insert procedure wunderbar. Tja, scheisse wars. Wenn ich mit Insert die Leerzeichen und den - einfügen will, kommt nur Müll raus. Hier mal der Code, vielleicht hab ich ja einfach nur nen Denkfehler un sehs einfach nicht.
Delphi-Quellcode:
Aufruf folgendermassen:
function TMainForm.ReplaceString(fNummer: String): String;
var hInsert : String; i : Integer; begin hInsert := ' - '; if (fNummer<>'')then begin fNummer := StringReplace(fNummer,'(','',[rfReplaceAll]); fNummer := StringReplace(fNummer,')','',[rfReplaceAll]); fNummer := StringReplace(fNummer,'/','',[rfReplaceAll]); fNummer := StringReplace(fNummer,'\','',[rfReplaceAll]); fNummer := StringReplace(fNummer,'-','',[rfReplaceAll]); for I := 1 to Length(fNummer) do // Iterate begin if fNummer[i]= ' ' then begin fNummer := StringReplace(fNummer,' ','',[rfReplaceAll]); Insert(hInsert, fNummer, i); end; end; // for end; Result := fNummer; end;
Delphi-Quellcode:
Klappt auch alles wunderbar, bis darauf dass mein String der rauskommt so aussieht:
ShowMessage(ReplaceString(hFeld));
0911-2-4-2-4-6-0 sobald ich in hInsert die leerzeichen rausnehme stimmt mein string, also: 0911-242460 warum verhaspelt sich delphi mit den leerzeichen? oder bin ich vielleicht nur zu blöd? Aber ich brauche die Leerstellen, da die Textdatei später über ein externes Programm eingelesen wird, und die Leerstellen an der Stelle sein müssen. Zum Hühnermelken. wäre klasse wenn einer spontan weiterhelfen könnte...... Sollte eigentlich ein 20 Minüter werden. Aber irgendwie hat das dann doch net so geklappt wie geplant. Erstens kommt es anders zweitens als man denkt. Gruss Daniel |
Re: Probleme mit Insert? Stringbearbeitung!
Der Debugger ist dein Freund ;-)
Wenn du in deiner Schleife schaust, ob das aktuelle Zeichen ein Leerzeichen ist, ist dort 1 (in Worten: ein) Zeichen. Ersetzt du es durch " - " sind das 3 (in Worten: drei) Zeichen. Also stimmt dein i nicht mehr, denn es zeigt jetzt auf das erste Leerzeichen des eingefügten " - ", da aber der Schleifendurchlauf zu Ende ist, zeigt es kurz darauf auf das "-" von " - ". Beim nächsten Durchlauf zeigt i dann auf das zweite Leerzeichen von " - ", ergo werden nochmal mit StringReplace sämtliche Leerzeichen auf dem String entfernt, er wird wieder um zwei verkürzt. Damit rutscht die zweite Zahl hinter dem Leerzeichen (in deinem Fall die 4) und fügt dort nochmal " - " ein, denn er hat ja vorher festgestellt, daß er wieder auf ein Leerzeichen getroffen ist, obwohl er das mit StringReplace wieder gelöscht hat. Folgendes klappt vielleicht besser:
Delphi-Quellcode:
function ReplaceString(fNummer: String): String;
var i : Integer; begin if (fNummer<>'')then begin fNummer := StringReplace(fNummer,'(','',[rfReplaceAll]); fNummer := StringReplace(fNummer,')','',[rfReplaceAll]); fNummer := StringReplace(fNummer,'/','',[rfReplaceAll]); fNummer := StringReplace(fNummer,'\','',[rfReplaceAll]); fNummer := StringReplace(fNummer,'-','',[rfReplaceAll]); for I := 1 to Length(fNummer) do // Iterate begin if fNummer[i]= ' ' then begin fNummer[i] := '-'; end; end; // for fNummer := StringReplace(fNummer, '-', ' - ', [rfReplaceAll]); end; Result := fNummer; end; |
Re: Probleme mit Insert? Stringbearbeitung!
hallo daniel!
du brauchst deswegen keine hühner zu melken, sondern einfach den quelltext vor deinem geistigen auge ablaufen zu lassen :mrgreen: das problem liegt daran, dass du ein zeichen entfernst - an der stelle i und dafür 3 zeichen einfügst ' - '. delphi verhaspelt sich daher nicht an den leerzeichen, sondern eher daran, dass sich sie länge von fNummer während der verarbeitung ändert. an deiner stelle würde ich den ergebnisstring in einem hilfsstring zusammenbauen --> stelle für stelle aus fNummer übernehmen und falls ein leerzeichen gefunden wurde, dann BlankMinusBlank anhängen. mfg, stefan Edit: zu langsam... :stupid: |
Re: Probleme mit Insert? Stringbearbeitung!
jou,
danke für die Antworten. Hatte eben im chat nachgefragt. nachdem mir jemand den tip mit der for schleife gegeben hatte wars mir dann auch klar.... :wall: :wall: danke für die hilfe! gruss Daniel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz