Einzelnen Beitrag anzeigen

hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#6

AW: Zeilenumbruch ersetzen Algoritmud

  Alt 11. Mär 2018, 13:51
Vielen Dank schon einmal für die vielen Beitröge. Ich versuche darauf einzugehen. Wie gesagt, ich bin kein Profi und mir geht es eher um einen Aufbau des Algorithmus.

Es geht kein Weg daran vorbei, die zu verarbeitenden Daten in den Speicher zu laden. Die Frage ist "nur" wie groß die Happen sind die verarbeitet werden.
Das weiß ich ja. Deswegen lade ich mit einer Schleife immer die Chunks und verarbeite sie. In dem Fall so,Ute ich dann das Häppchen in Zeilen. Und da ich nur so,irrem wenn das Zeilenende „0A“ als Umbruch habe, muss ich eben vor diesem ganzen Vorgang die eventuellen, für mich ungewollten, Zeilenumbrüche durch „0A“ ersetzen. Und das ist eben meine Frage, wie ein solcher Algorithmus auf Basis von TFileStream aussehen kann, wo man z.B. einfach eine modifizierte Kopie der originalen Datei erstellt mit den ersetzten Zeilenumbrüchen.
Ich weiß ja nicht wie Deine Ausgabe der Text-Datei vonstatten geht, erstellt dein Parser einen String pro Zeile?
Genau der Parser arbeitet Zeilenweise. Es ist eben nur doof, wenn er auf eine Zeile eines falsch gesplitteten Strings zurück greift. Und wie gesagt, ich möchte ja erst im zweiten Durchgang splitten, wenn ich weiß, dass alle Ueilenenden der Datei „0A“ sind bzw. durch diese ersetzt wurden.
ungefähr (ungetestet) sowas:
Delphi-Quellcode:
procedure TIrgendeineKlasse.Zeichenaustauschen(input : TMemoryStream; output : TMemoryStream);
Var
  ch : Char;
begin
  input.Position := 0;
  output.Position := 0;
  // Ist überhaupt was in der Datei drin?
  if input.Read(ch, 1) > 0 then begin
    repeat
      case ch of
        // Hier zeichenweise entscheiden, was geschehen soll.
        #10 : begin
                output.Write(ch,1);
              end;
        #13 : begin
                // output.Write(ch,1);
              end;
      else
        // Übrige Zeichen ausgeben.
        output.Write(ch,1);
      end;
    until input.Read(ch, 1) = 0;
    input.Position := 0;
    output.Position := 0;
  end;
end;
Die Schleife geht ja Byteweise vor. Wenn ich jetzt auf #13 treffe, was muss ich dann machen?
  Mit Zitat antworten Zitat