AGB  ·  Datenschutz  ·  Impressum  







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

Zeilenumbruch ersetzen Algorithmus

Ein Thema von hansklok · begonnen am 10. Mär 2018 · letzter Beitrag vom 15. Mär 2018
 
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.752 Beiträge
 
Delphi 12 Athens
 
#10

AW: Zeilenumbruch ersetzen Algorithmus

  Alt 11. Mär 2018, 16:20
Delphi-Quellcode:
procedure TIrgendeineKlasse.Zeichenaustauschen(input : TMemoryStream; output : TMemoryStream);
Var
  ch1 : Char;
  ch2 : Char;
begin
  input.Position := 0;
  output.Position := 0;
  // Ist überhaupt was in der Datei drin?
  if input.Read(ch1, 1) > 0 then begin
    repeat
      case ch of
        #13 : begin // Das nächste Zeichen lesen.
                if input.Read(ch2, 1) <> 0 then begin
                  case ch2 of
                    #10 : ; // ignorieren, wird als nächstes Zeichen gelesen.
                  else
                    begin // wenn wir 'ne #13 erhalten und keine #10 folgt, geben wir 'ne #10 aus.
                      ch2 := #10;
                      output.Write(ch2,1);
                    end;
                  end;
                  // und wieder ein Zeichen zurück.
                  input.Position := input.Position - 1;
                end;
              end;
      else
        output.Write(ch1,1); // Übrige Zeichen ausgeben.
      end;
    until input.Read(ch1, 1) = 0;
    input.Position := 0;
    output.Position := 0;
  end;
end;
Der Code hat immer noch ein paar Probleme (unter der Annahme, daß hier mindestens das im Profil angegeben Delphi 2010 zum Einsatz kommt):

1. Auf der einen Seite werden ch1 und ch2 als Char (2 Bytes) deklariert, mit Read wird aber nur jeweils 1 Byte eingelesen. Damit ist das höhere Byte undefiniert und das case könnte daneben gehen. Da wir ja hier alle wohl von eine ANSI- bzw. UTF8-codierten Textdatei ausgehen, würde ich direkt mit Byte (oder AnsiChar) arbeiten.

2. Der Code unterschlägt das letzte Zeilenende, wenn dieses durch ein einzelnes #13 gekennzeichnet ist.

3. Eine Unicode-Datei könnte man damit nicht direkt umsetzen, da der komplette Bereich 0D00-0DFF sowie alle Zeichen mit 0D im Low-Byte falsch behandelt werden. Ich vermute aber, daß dies hier nicht relevant sein wird (siehe 1).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 21:05 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