AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

CSV anpassen

Ein Thema von julchen · begonnen am 15. Jan 2021 · letzter Beitrag vom 26. Jan 2021
 
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#26

AW: CSV anpassen

  Alt 20. Jan 2021, 10:12
@Jumpy
OOP bedeuted nicht, das alle Methoden die irgendetwas mit dem Datenobjekt zu tun haben, auch im Datenobjekt implementiert werden.
Methoden für den Export oder Import gehören dann eher in eine Klasse die das entsprechende Dateiformat representiert.

Da es sich hier um zwei verschiedene Formate handelt, würde ich den Export und Import zumindest in zwei Methoden aufteilen.
Das erhöht vieleicht auch die Lesbarkeit.

Als Trennzeichen soll das Semikolon genutz werden.
Ich habe den Code von Uwe Raabe ein bischen abgewandelt https://www.delphipraxis.net/1481113-post23.html

Delphi-Quellcode:
type
  TMyData = record
    Anrede: string;
    Titel: string;
    Nachname: string;
    Vorname: string;
    mit: string;
  end;

function TextToMyData(ALine: string): TMyData;
var
  N: Integer;
begin
  { "Anrede" immer vorhanden }
  N := ALine.IndexOf(' ');
  Result.Anrede := ALine.Substring(0, N);
  ALine := ALine.Remove(0, N + 1);

  { "Titel" ein oder mehrere optional }
  N := ALine.LastIndexOf('.');
  if N > 0 then
  begin
    { Punkt mitnehmen }
    Result.Titel := ALine.Substring(0, N + 1);
    ALine := ALine.Remove(0, N + 2);
  end;

  { "mit" immer vorhanden }
  N := ALine.LastIndexOf(' ');
  if N > 0 then
  begin
    Result.mit := ALine.Substring(N + 1);
    ALine := ALine.Remove(N);
  end;

  { "Vorname" optional }
  N := ALine.IndexOf(',');
  if N > 0 then
  begin
    Result.Vorname := ALine.Substring(N + 1);
    Result.Vorname := Result.Vorname.Trim;
    ALine := ALine.Remove(N);
  end;

  { "Nachname" immer vorhanden }
  Result.Nachname := ALine.Trim;
end;

function MyDataToCSV(const AValue: TMyData): string;
var
  lst: TStringList;
begin
  lst := TStringList.Create;
  try
    lst.QuoteChar := '"';
    lst.Delimiter := ';';
    lst.StrictDelimiter := True;

    { Anrede;Titel;Nachname;Vorname;mit }
    lst.Add(AValue.Anrede);
    lst.Add(AValue.Titel);
    lst.Add(AValue.Nachname);
    lst.Add(AValue.Vorname);
    lst.Add(AValue.mit);

    Result := lst.DelimitedText;
  finally
    lst.Free;
  end;
end;

procedure TForm1.TestClick(Sender: TObject);
var
  i: Integer;
  s: string;
  v: TMyData;
begin
  Memo2.Lines.Clear;
  for i := 0 to Memo1.Lines.Count - 1 do
  begin
    s := Memo1.Lines[i];
    { leere Zeilen ignorieren (Textdateien enthalten als letztes Zeichen häufig noch einen Zeilenumbruch) }
    if s.Length > 0 then
    begin
      v := TextToMyData(s);
      s := MyDataToCSV(v);
      Memo2.Lines.Add(s);
    end;
  end;
end;
  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:29 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