AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichen in String ersetzen

Ein Thema von JanWe · begonnen am 19. Dez 2016 · letzter Beitrag vom 20. Dez 2016
 
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Zeichen in String ersetzen

  Alt 20. Dez 2016, 01:17
Überprüfe bitte mal, ob die inc(i) immer korrekt sind. Inc(i) entspricht halt i := i + 1. Aber bei x01 verarbeitest Du doch drei Zeichen, demnach müsstest Du hier auch i := i + 3 machen statt inc(i).
Bei 01 wäre es dann i := i + 2;

Bin mir nicht sicher, ob ich die Logik verstanden habe, es ist doch schon etwas zu früh - sorry spät
Quelltext hab' ich mal angepasst und ein bisserl kommentiert, aber nicht getestet.
Delphi-Quellcode:
procedure TForm1.Button9Click(Sender: TObject);
var Rest, s, TEX: string;
  Menge, Laenge, i: Integer;
begin
  // 8 8 88 888 X01
  S := '2,9,0171,,25,01640X0174,01747,23,,,,47X014747'; //

  S := '0,,25,01640X0174,01747,23,,,,47X014747'; //
  laenge := length(s);
  i := 1;
  Menge := 0;
  while i < laenge do begin
    if s[i] = '5then Caption := s[i];
    // -> x01
    if (s[i] = 'X') and (s[i + 1] = '0') then begin
      // wenn X01
      if (s[i + 2] = '1') then begin
        TEX := TEX + ',' + ' Typ A: ';
        inc(i,2);
      end;
    end else ////////////////////////////////////
    // Caption := s[i];
    // normaler 01
    if (s[i] = '0') and (s[i + 1] = '1') then begin
      TEX := TEX + ',' + ' Typ B: ';
      inc(i); // Sonst finden wir im nächsten Durchgang die 1 und geben sie aus.
    end else ////////////////////////////////////
    // DOPPELTE Trenner finden
    if (s[i] = ',') then begin // and (s[i + 1] = ',') then
      inc(Menge); // Zählt die Anzahl der , ???
    end else ////////////////////////////////////
    if Menge > 0 then begin
      // Hier kommen wir nur hin, wenn Menge > 0
      // und keine der anderen Bedingungen erfüllt ist.
      // Kann hier jemals ein Komma ausgegeben werden, dass vor X01 bzw. 01 steht?
      Caption := s[i];
(*
      if Menge = 1 then TEX := TEX + ',' + s[i]
      // Ist Menge jedoch > 1, wird kein Komma ausgegeben.
      // Geht uns da nicht bei mehreren Kommas was verloren?
      // Hier dürfte die Ursache für das fehlende Komma zwischen 0 und 25 liegen.
      else TEX := TEX + s[i];
*)

      // Würde hier nicht das reichen?
      // Egal wieviele wir gefunden haben, wir geben nur eins aus.
      TEX := TEX + ',' + s[i];
      Menge := 0; //
    end
    else TEX := TEX + s[i]; // LAST CHANGE
    inc(i);
  end; // END WHILE
  Memo2.text := TEX;
  Memo1.text := S;
end; //
Kennt Delphi 5 schon die Funktion AnsiReplaceText aus der Unit StrUtils?

Wenn ja, dann ließe sich das Problem eventuell so lösen:
Delphi-Quellcode:
s := '0,,25,01640X0174,01747,23,,,,47X014747';
s := AnsiReplaceText(s,'X01',' Typ A: ');
s := AnsiReplaceText(s,'01',' Typ B: ');
while Pos(',,',s) > 0 do begin
  s := AnsiReplaceText(s,',,',',');
end;
Ansonsten eventuell:
Delphi-Quellcode:
s := '0,,25,01640X0174,01747,23,,,,47X014747';
s := StringReplace(s,'X01',' Typ A: ',[rfReplaceAll, rfIgnoreCase]);
s := StringReplace(s,'01',' Typ B: ',[rfReplaceAll, rfIgnoreCase]);
while Pos(',,',s) > 0 do begin
  s := StringReplace(s,',,',',',[rfReplaceAll]);
end;
  Mit Zitat antworten Zitat
 


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 23:40 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