AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein CSV Datei einlesen .. Return in CSV-Datei
Thema durchsuchen
Ansicht
Themen-Optionen

CSV Datei einlesen .. Return in CSV-Datei

Ein Thema von erich.wanker · begonnen am 26. Jun 2018 · letzter Beitrag vom 28. Jun 2018
Antwort Antwort
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#1

CSV Datei einlesen .. Return in CSV-Datei

  Alt 26. Jun 2018, 17:52
Hallo Leute,
ich will eine CSV Datei einlesen (in ein TMemo - altes ACCESS-Programm ist die Quelle) und importieren - aber es klappt nicht.

Jetzt habe ich den Fehler gefunden: Einige Felder vom Access sind Notizfelder, wo Zeilenumbrüche drinnen sind.

Dadurch sind die Zeilenumbrüche auch in der CSV Datei - und die versauen mir den Import!


Jetzt hab ich gedacht - lösche ich einfach alle Zeilenumbrüche .. funktioniert aber auch nicht .. (Listenindex überschreitet..)

Ich mach folgendes:

Delphi-Quellcode:
memo1.Text := StringReplace(memo1.Text, sLineBreak, '', [rfReplaceAll]);


              for i:=0 to memo1.Lines.Count-1 do
              begin
                try
                  SL:=TStringList.Create;
                  SL.Delimiter := ';';
                  SL.StrictDelimiter:=true;
                  SL.DelimitedText := memo1.Lines[i];



                  t0 := SL.Strings[0];
                  t1 := SL.Strings[1];
                  t2 := SL.Strings[2];
                  t3 := SL.Strings[3];
                  t4 := SL.Strings[4];
                  t5 := SL.Strings[5];
ect..

Hat jemand eine Idee was ich da machen kann?

LiGrü
Erich
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#2

AW: CSV Datei einlesen .. Return in CSV-Datei

  Alt 26. Jun 2018, 18:00
Zeilenumbrüche beim Export entfernen und nicht beim Import.

Momentan müsste aus der gesamten CSV-Datei im Memo ein Einzeiler werden.

Wie ist WordWrap beim Memo eingestellt? True, dann macht es selbst "nach Belieben" eigene Zeilenumbrüche in die CSV-Datei.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: CSV Datei einlesen .. Return in CSV-Datei

  Alt 26. Jun 2018, 18:00
Zeilenumbrüche in Memos sind keine vollständigen SLineBreaks sondern nur #10. Diese müssen nur wenn ohne #13 gelöscht werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#4

AW: CSV Datei einlesen .. Return in CSV-Datei

  Alt 26. Jun 2018, 19:36
Wie sehen denn diese Zeilen mit Zeilenumbruch konkret aus?
Code:
1,Name,"Feld mit Zeilen
umbruch",2
Sind also die Felder mit den Zeilenumbrüchen quoted?

Dann ist das Ermitteln der ganzen (Daten-)Zeilen sehr einfach.

Man liest Zeile für Zeile, bis man eine gerade Anzahl an Quote-Chars hat. Das ist dann die Daten-Zeile.
  Mit Zitat antworten Zitat
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#5

AW: CSV Datei einlesen .. Return in CSV-Datei

  Alt 28. Jun 2018, 11:02
Danke für die Hilfe


Die Zeilenumbrüche im Text sind #13#10 (lt. Asciiarmor)
Anführungszeichen " , die den Text umgeben habe ich keine
WordWrap ist false

..ich werde die Daten wohl oder übel manuell bereinigen

LiGrü
Erich
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#6

AW: CSV Datei einlesen .. Return in CSV-Datei

  Alt 28. Jun 2018, 13:55
Lese die Daten doch einfach Block- bzw. Byteweise, zähle die Felder pro Datensatz mit (dann weißt Du, wann das Notizfeld kömmt) und lasse in den Notizfeldern die 13/10er zu.
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
563 Beiträge
 
Delphi XE6 Enterprise
 
#7

AW: CSV Datei einlesen .. Return in CSV-Datei

  Alt 28. Jun 2018, 14:03
Wie ich das mache:
Vor dem Export die Umbrüche ersetzen, z.B. durch \n oder <p>.
Nach dem Import dann wieder retour.
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#8

AW: CSV Datei einlesen .. Return in CSV-Datei

  Alt 28. Jun 2018, 14:26
Ich meine also ungefähr so (ungetestet, vermutlich nicht fehlerfrei):
Code:
var F:File of AnsiChar; Buf:Array [1..512] of AnsiChar; Col:Integer; S:String; C:AnsiChar;
...
  AssignFile(F, FileName);
  Reset(F);
  Col:=1;
  S:='';
  while (not EoF(F)) do
   begin
     BlockRead(F, Buf, 512, Count);
     P:=1;
     repeat
       C:=Buf[P];
       case C of
         #10 : if (Col = 5) then  // Notizfeld
                begin
                  Memo.Lines.Add(S);
                  S:='';
                end
               else
                begin // Satzende
                  Col:=1;
                  S:='';
                end;
         #13 : begin
               end;
         ';' : begin
                 Memo.Lines.Add(S);
                 Inc(Col);
                 S:='';
               end;
         else
          begin
            S:=S + C;
          end;
       end;
       Inc(P);
     until (P > Count);
   end;
  CloseFile(F);
...
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: CSV Datei einlesen .. Return in CSV-Datei

  Alt 28. Jun 2018, 14:54
Wenn es sich wirklich um CSV handeln sollte, dann würde ich dem Absender ungequotete #13#10 zurückschicken.
Ich habe übrigens des öfteren Daten mit Partnern ausgetauscht, da spricht man über den Zeichensatz, die Feldtrenner, die Satztrenner , formuliert ein Papier dazu und gut ist.


Falls noch jemand was nachlesen möchte:
https://www.ietf.org/rfc/rfc4180.txt
https://ronaldduncan.wordpress.com/2...elimited-text/

gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 02:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz