AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Klatsch und Tratsch Regulärer Ausdruck Zeilenumbruch in Zeile bei CSV ersetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Regulärer Ausdruck Zeilenumbruch in Zeile bei CSV ersetzen

Ein Thema von Monday · begonnen am 5. Mai 2021 · letzter Beitrag vom 5. Mai 2021
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#1

AW: Regulärer Ausdruck Zeilenumbruch in Zeile bei CSV ersetzen

  Alt 5. Mai 2021, 09:55
Ich denke mal seine CSV-Komponente kann mit Zeilenumbrüchen in Values nicht umgehen und trennt stattdessen dort das als Datensatz auf. (was leider auf die meisten Komponenten/Funktion zutrifft)
Auch behandeln viele Komponenten "alle" Arten von Zeilenumbruch gleich. (als Datensatzende)

Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Regulärer Ausdruck Zeilenumbruch in Zeile bei CSV ersetzen

  Alt 5. Mai 2021, 10:47
Ganz plump:
- Datei einlesen
- Zeile für Zeile durchgehen (von hinten nach vorne)
- Die " in der Zeile zählen
- Wenn die Anzahl an " ungerade ist, die letzte Zeile hinten an die aktuelle anfügen und löschen
- Datei neu speichern.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Regulärer Ausdruck Zeilenumbruch in Zeile bei CSV ersetzen

  Alt 5. Mai 2021, 10:56
Ich denke mal seine CSV-Komponente kann mit Zeilenumbrüchen in Values nicht umgehen und trennt stattdessen dort das als Datensatz auf.
Mit folgendem Helper für TTextReader kann man das aber hinkriegen:
Delphi-Quellcode:
type
  TTextReaderHelper = class helper for TTextReader
    function CharCount(const ALine: string; AChar: Char): Integer;
    procedure ReadQuotedLine(Target: TStrings);
  end;

function TTextReaderHelper.CharCount(const ALine: string; AChar: Char): Integer;
var
  C: Char;
begin
  result := 0;
  for C in ALine do begin
    if C = AChar then
      Inc(result);
  end;
end;

procedure TTextReaderHelper.ReadQuotedLine(Target: TStrings);
var
  line: string;
  line2: string;
  saveStrictDelimiter: Boolean;
begin
  line := ReadLine;
  if Odd(CharCount(line, Target.QuoteChar)) then begin
    { Eine ungerade Anzahl von Quotes bedeutet, daß der gequotete String mindestens einen Zeilenumbruch enthält.
      Wir hängen also die nachfolgenden Zeilen mit LineBreak an, bis eine weitere Zeile mit ungerader Anzahl
      Quotes kommt.
    }

    repeat
      line := line + sLineBreak;
      line2 := ReadLine;
      line := line + line2;
    until Odd(CharCount(line2, Target.QuoteChar));
  end;
  { Zeilenumrüche in line dürfen nicht in separate Einträge zerlegt werden! }
  saveStrictDelimiter := Target.StrictDelimiter;
  try
    Target.StrictDelimiter := True;
    Target.CommaText := line;
  finally
    Target.StrictDelimiter := saveStrictDelimiter;
  end;
end;
Nach dem ReadQuotedLine enthält Target die Liste der Feldwerte, wobei Zeilenumbrüche in einem Wert erhalten bleiben.

Weil wenn ich die CSV in einer Excel Tabelle öffne, dann macht der mir die Zeilenhöhe größer und die Tabelle ist dann unschön und schwer lesbar.
Tja, dann hilft dir mein Code leider auch nicht weiter. Oder doch, wenn du ihn dazu benutzt die Zeilenumbrüche zu entfernen. (RegEx wäre mir persönlich da jetzt zu kompliziert)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


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:22 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