AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CVS-Import FireDAC

Ein Thema von Ghostwalker · begonnen am 20. Jun 2020 · letzter Beitrag vom 7. Okt 2020
Antwort Antwort
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

CVS-Import FireDAC

  Alt 20. Jun 2020, 06:35
Datenbank: SQLite • Version: 3.24 • Zugriff über: FireDAC
Hallo und guten Morgen

Folgende Problematik:

Ich importiere CVS-Dateien via TFDBatchMove in ein TFDMemtable und zeige das ganze erstmal in einem TDBGrid an. Soweit so gut, funktioniert auch.

ABER:

Die CVS-Dateien enthalten in der ersten Zeile die Namen der Spalten (bzw. dessen Bedeutung). Leider hab ich es bisher (nach 2 Tagen) nicht geschaft,
dem TFDBatchMove beizubringen, das er die erste Zeile (bzw. dessen Einträge) als Feldnamen zu nutzen. Er nutzt immer das Format "FDMemFieldXXX". Das ist natürlich etwas
ungünstig, wenn man unterschiedliche CSV-Dateien hat, bei denen zwar die Bedeutung der Spalten (je nach Name) gleich ist, sie aber unterschiedliche Anzahlen von Spalten haben
(insbesondere wenn man die Daten schließlich in eine DB überträgt).

Deshalb:

Gibt es eine Lösung, wie ich dem TFDBatchmove beibringen kann, die 1. Zeile der CSV-Datei nicht als normale Datenzeile, sonder als "Definitions-Zeile" zu interpretieren ?
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: CVS-Import FireDAC

  Alt 20. Jun 2020, 07:15
..."Leider hab ich es bisher (nach 2 Tagen) nicht geschaft"...
=> 1min google "TFDBatchMove":
http://docwiki.embarcadero.com/CodeE...tchMove_Sample

...
Sets the FileName property of TFDBatchMoveTextReader with the location of data.txt. This is the file used to load the data to the table. Also several DataDef properties are adjusted according to the text file format.
DataDef.Separator := ','; It defines the separator used to separate the fields in the text file.
DataDef.WithFieldNames := True; It specifies that the field name is included in the first row of the text file.
...
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: CVS-Import FireDAC

  Alt 20. Jun 2020, 15:25
Tja..das hatte ich schon probiert. Leider hats nicht funktioniert.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: CVS-Import FireDAC

  Alt 20. Jun 2020, 15:59
Deine Frage
Gibt es eine Lösung, wie ich dem TFDBatchmove beibringen kann, die 1. Zeile der CSV-Datei nicht als normale Datenzeile, sonder als "Definitions-Zeile" zu interpretieren ?
ist mit diesem Hinweis eigentlich beantwortet:
DataDef.WithFieldNames := True; It specifies that the field name is included in the first row of the text file.
Wenn das bei dir nicht funktioniert, machst du vielleicht was falsch. Was das ist, können wir aber nicht sehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: CVS-Import FireDAC

  Alt 20. Jun 2020, 16:10
Ich habs grad auf die ganz einfach Tour noch mal Probiert (sicher ist sicher).

neue VCL anwendung
TFDBatchMoveTextReader drauf.
Optionen -> eingestellt.
FileName auf die Datei eingestellt.
TFDBatchMoveDataSetWrite drauf,TFDMemTable drauf beides miteinander verknüpft.
TFDBatchMove drauf, reader und writer gesetzt
TDBDatasource drauf -> mit dem MemTable verknüpft.
TDBGrid drauf mit dem DataSource verknüpft.


Anschließend in der IDE auf Guess Format und schließliche Execute im BatchMove ausgeführt.

Ergebniss siehe Anhang.

Kleiner Schnipsel der CSV-Datei, die es zu importieren gilt.

Code:
"alpha3-b","alpha3-t","alpha2","English","French"
"aar","","aa","Afar","afar"
"abk","","ab","Abkhazian","abkhaze"
"ace","","","Achinese","aceh"
"ach","","","Acoli","acoli"
"ada","","","Adangme","adangme"
"ady","","","Adyghe; Adygei","adyghé"
"afa","","","Afro-Asiatic languages","afro-asiatiques, langues"
"afh","","","Afrihili","afrihili"
"afr","","af","Afrikaans","afrikaans"
"ain","","","Ainu","aïnou"
"aka","","ak","Akan","akan"
"akk","","","Akkadian","akkadien"
"alb","sqi","sq","Albanian","albanais"
"ale","","","Aleut","aléoute"
"alg","","","Algonquian languages","algonquines, langues"
"alt","","","Southern Altai","altai du Sud"
"amh","","am","Amharic","amharique"
"ang","","","English, Old (ca.450-1100)","anglo-saxon (ca.450-1100)"
"anp","","","Angika","angika"
"apa","","","Apache languages","apaches, langues"
"ara","","ar","Arabic","arabe"
"arc","","","Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)","araméen d'empire (700-300 BCE)"
"arg","","an","Aragonese","aragonais"
"arm","hye","hy","Armenian","arménien"
"arn","","","Mapudungun; Mapuche","mapudungun; mapuche; mapuce"
"arp","","","Arapaho","arapaho"
"art","","","Artificial languages","artificielles, langues"
"arw","","","Arawak","arawak"
"asm","","as","Assamese","assamais"
Angehängte Grafiken
Dateityp: jpg dbgrid.JPG (91,1 KB, 36x aufgerufen)
Uwe
e=mc² or energy = milk * coffee²

Geändert von Ghostwalker (20. Jun 2020 um 16:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.176 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: CVS-Import FireDAC

  Alt 20. Jun 2020, 17:01
Hallo,

da ich es in deinem Code-Ausschnitt nicht sehe. Hast du denn wie schon vorgeschlagen:

TFDBatchMoveTextReader.DataDef.WithFieldNames := True; auch gesetzt?
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: CVS-Import FireDAC

  Alt 20. Jun 2020, 17:20
Bitte die Posts erstmal lesen.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: CVS-Import FireDAC

  Alt 21. Jun 2020, 06:27
Guten Morgen

Nach weiteren Analysen (böse Zungen würden sagen "Rumprobierei" ) hab ich zwar die Ursache des Problems nicht gefunden, aber lustigerweise eine Lösung.

Bisher:

Code:
    Reader.FileName := fod.FileName;
    bm.GuessFormat();
    bm.Execute;
Jetzt:
Code:

    Reader.FileName := fod.FileName;
    bm.GuessFormat();
    PrepareFieldNames(HeadLine);
    UpdateReaderFieldnames;
    bm.Analyze := [];
    bm.Execute;
PrepareFieldNames mach nix anderes, als die 1. Zeile vom CSV selbst zu analysieren und die Feldnamen in einer Stringliste bereit zu stellen.
UpdateReaderFieldNames setzt nun die entsprechenden Feldname in der Definition des Readers manuell.
Danach noch die automatische Analyze (lt.Doku werden die Einstellungen hier nur im Execute verwendet) abgeschalten und schon gehts.

Wie gesagt, die genaue Ursache des Problems ist unbekannt. Sie liegt aber wohl im Umfeld der automatischen Analyse des Formats. Evtl. ist es auch "nur" ein Problem der
Community-Version.

Danke trotzdem für euere Mühen
Uwe
e=mc² or energy = milk * coffee²
  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 06:02 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