AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme mit Insert? Stringbearbeitung!

Ein Thema von ShakerWD · begonnen am 29. Apr 2004 · letzter Beitrag vom 30. Apr 2004
Antwort Antwort
ShakerWD

Registriert seit: 18. Jan 2003
6 Beiträge
 
Delphi 7 Personal
 
#1

Probleme mit Insert? Stringbearbeitung!

  Alt 29. Apr 2004, 21:55
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:
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;
Aufruf folgendermassen:
ShowMessage(ReplaceString(hFeld)); Klappt auch alles wunderbar, bis darauf dass mein String der rauskommt so aussieht:
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
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#2

Re: Probleme mit Insert? Stringbearbeitung!

  Alt 29. Apr 2004, 23:18
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;
  Mit Zitat antworten Zitat
grayfox

Registriert seit: 22. Jan 2003
Ort: Litschau
173 Beiträge
 
Delphi 4 Standard
 
#3

Re: Probleme mit Insert? Stringbearbeitung!

  Alt 29. Apr 2004, 23:26
hallo daniel!

du brauchst deswegen keine hühner zu melken, sondern einfach den quelltext vor deinem geistigen auge ablaufen zu lassen

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...
  Mit Zitat antworten Zitat
ShakerWD

Registriert seit: 18. Jan 2003
6 Beiträge
 
Delphi 7 Personal
 
#4

Re: Probleme mit Insert? Stringbearbeitung!

  Alt 30. Apr 2004, 01:17
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....

danke für die hilfe!

gruss

Daniel
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf