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

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 3 von 7     123 45     Letzte » 
nahpets
(Gast)

n/a Beiträge
 
#21

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 12: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.810 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 12:32
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"
Die Fehlermeldung deutet auf einen Zugriff auf ein nicht erzeugtes Objekt.

Könnte es sein, das in der 1. Zeile weniger Felder definiert sind als in dieser Zeile.
Der Helper legt er "nur" die Anzahl der Felder an, die in der 1. Zeile stehen.

Das sollte ja auch nur als Beispiel dienen.

Welche Wert hat slRow.Count bei i=0 ?
Und welchen Wert hat es in der Zeile, die den Fehler wirft?
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

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

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 12: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
 
#24

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 12: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.810 Beiträge
 
Delphi 10 Seattle Enterprise
 
#25

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 12: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
 
#26

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13: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 MaBuSE
MaBuSE

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

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13:08
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.
Ich vermute es verwirrt ihn, das der selbe Datensatz im Helper einen Fehler wirft und im Beispiel funktioniert.
Aber es ist völlig egal. Wir können nur vermuten. Er wird es uns schreiben.
Er möchte wahrscheinlich "nur" die Allgemeine Schmutzverletzung weg haben

In Post #19 wird es auch richtig gemacht und funktioniert nicht.
Es wird 2 mal richtig gemacht. Einmal geht es und einmal nicht.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)

Geändert von MaBuSE ( 9. Jun 2017 um 13:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#28

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
132 Beiträge
 
#29

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13:30
Hi,

Könnte es sein, das in der 1. Zeile weniger Felder definiert sind als in dieser Zeile. Der Helper legt er "nur" die Anzahl der Felder an, die in der 1. Zeile stehen.
Nein - jedenfalls nicht wenn ich die Datei mit Excel öffne - dann passt das.

Welche Wert hat slRow.Count bei i=0 ?
Und welchen Wert hat es in der Zeile, die den Fehler wirft?
bei Beginn: slRow.Count = 19
bei Fehler: slRow.Count = 20

Also interpretiert Delphi dieset "rechnung@mueller-meyer.de; einkauf@mueller-meyer.de" als zwei Felder OBWOHL diese von Anführungszeichen eingeschlossen sind. Wenn ich die zweite Email-Adresse weiter nach vorne setze ... also so:

"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; einkauf@mueller-meyer.de";"1";"36";"...eller-meyer.de"

dann knallt es genauso - und wieder bei Feld 20 In sofern hattest Du schon recht das Feld Nr. 20 nicht existiert. Aber warum ??

Hans
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
132 Beiträge
 
#30

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 9. Jun 2017, 13: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
  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 07:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf