AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi csv Datei Import ClassHelper für TClientDataSet
Thema durchsuchen
Ansicht
Themen-Optionen

csv Datei Import ClassHelper für TClientDataSet

Ein Thema von MaBuSE · begonnen am 26. Okt 2011 · letzter Beitrag vom 24. Mai 2019
Antwort Antwort
Seite 1 von 2  1 2      
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
259 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 12:36
Im Moment habe ich noch ein problemn wenn im Text ein Semikolon vorkommt - dann gibt es eine Exception. Also bei

"das ist der;eigentliche Text Feld 1";"Feld 2";"Feld 3"

da bringt das erste Semikolon reproduzierbar ne Exception.
Um das Problem analysieren zu können benötige ich mehr Informationen:
  • Welche Exception?
  • An welcher Stelle tritt die auf?
  • Stack?
Das passiert an der Stelle Fields[j].AsString := slRow[j];

Delphi-Quellcode:
    DisableControls;
    for i := 0 to slFile.Count - 1 do
    begin
      slFile[i] := StringReplace(slFile[i], '"', '''', [rfReplaceAll, rfIgnoreCase]);
      slRow.DelimitedText := slFile[i];
      Append;
      for j := 0 to slRow.Count -1 do
      begin
        Fields[j].AsString := slRow[j];
      end;
      Post;
    end;
    EnableControls;
  finally
    slFile.Free;
    slRow.Free;
  end;
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Mahnung.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x00684abe: read of address 0x00000000' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

slRow[j] hat zu dem Zeitpunkt folgenden Inhalt:

"12345";"1";"Müller-Meyer";"Müller-Meyer-Schulze GmbH";"";"Elbchaussee 1";"D";"22000";"Hamburg";"";"Frau";"Michaela";"Mül ler";"+49 (40) 123456-0";"+49 (40) 123456 111";"m.mueller@mueller-meyer.de";"1";"36";"rechnung@mueller-meyer.de; einkauf@mueller-meyer.de"

Gruß

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
259 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13:01
Komischerweise ... mit diesem Source:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1Fuellen;
  Memo2.Lines.Delimiter := ';';
  Memo2.Lines.QuoteChar := '"';
  Memo2.Lines.StrictDelimiter := false;
  Memo2.Lines.DelimitedText := Memo1.Lines[i];
end;
und dieser CSV klappt es:

"Test 5 - Hochkomma, ein Semikolon im Text ";"das ist der;eigentliche Text Feld 2";"Feld 3";"Feld 4"

Hans *verwirrt*
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13:13
Was verwirrt daran?

; trennt die einzelnen Werte.

Die Werte werden mit " eingerahmt.

; sind damit, wenn sie sich im mit " eingerahmten Text befinden, keine Trenner mehr.

Die "verwirrenden" Variante entspricht dem definierten und sowohl erwünschten, wie auch dem erwarteten Verhalten.

Wenn man " in 'ner CSV hat und ; als Trenner, dann sollte man nicht die " aus der CSV entfernen und hoffen, dass im Text keine ; vorkommen. Sollte dem dann doch so sein, kann das nur scheitern.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13:35
Was verwirrt daran?
Wenn Du den ganzen Beitrag gelesen hättest wüsstest Du was ihn verwirrt.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13:50
Was ihn verwirrt ist doch ganz einfach:

Wenn ich die QuotedChar entferne und dann durch das ; im Text ein Feld mehr bekomme, als in der ersten Zeile, dann muss das krachen.

Wenn ich 'ne CSV mit QuotedChar habe, dann sollte ich das auch entsprechend verwenden.
Ein zusätzliches ; zwischen den QuotedChars führt dann nicht zu 'ner abweichenden Feldzahl in der entsprechenden Zeile und damit auch nicht zu der Exception.

Zitat von MaBuSE:
Wenn Du den ganzen Beitrag gelesen hättest wüsstest Du was ihn verwirrt.
Habe den ganzen Beitrag gelesen und deshalb beschrieben, wo die Verwirrung herkommt und dass sie, bei korrekter Verwendung von QuotedChar und Delimiter in CSV-Dateien, nicht aufkommen würde.

Oder anders:

Wenn man aus der CSV die " entfernt, dann führt das ; in diesem Text rechnung@mueller-meyer.de; einkauf@mueller-meyer.de zu der Exception, es ist dann der Trenner, der zuviel ist und den Zugriff auf ein nicht erzeugtes Objekt verursacht.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13:52
Was ihn verwirrt ist doch ganz einfach:

Wenn ich die QuotedChar entferne und dann durch das ; im Text ein Feld mehr bekomme, als in der ersten Zeile, dann muss das krachen.
Was ihn verwirrt, ist das es kracht, obwohl die QuotedChar richtig gesetzt ist !!!
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 14:01
Wieso,

in Post #20 wird es richtig gemacht und funktioniert.

Und darunter steht, dass es ihn verwirrt.

Wenn ich das richtigt interpretiere, verwirrt ihn nicht die fehlerhafte Variante, sondern die korrekte.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 14:12
Die "verwirrenden" Variante entspricht dem definierten und sowohl erwünschten, wie auch dem erwarteten Verhalten.
Dank dem StrictDelimiter:=False (Antwort #20) gibt es noch mehr Verwirrungen, da dort nicht nur der definierte Delimiter als Trennzeichen verwendet wird.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
259 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 14:34
Die "verwirrenden" Variante entspricht dem definierten und sowohl erwünschten, wie auch dem erwarteten Verhalten.
Dank dem StrictDelimiter:=False (Antwort #20) gibt es noch mehr Verwirrungen, da dort nicht nur der definierte Delimiter als Trennzeichen verwendet wird.
Das ist egal .. sowohl bei StrictDelimiter:=False als auch bei ":=True" knallt es

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 14:36
Die "verwirrenden" Variante entspricht dem definierten und sowohl erwünschten, wie auch dem erwarteten Verhalten.
Dank dem StrictDelimiter:=False (Antwort #20) gibt es noch mehr Verwirrungen, da dort nicht nur der definierte Delimiter als Trennzeichen verwendet wird.
Was aber in diesem Beispiel keinen Unterschied macht.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:47 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