AGB  ·  Datenschutz  ·  Impressum  







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

CSV-Datei mit /sb

Ein Thema von Harry Stahl · begonnen am 25. Sep 2018 · letzter Beitrag vom 27. Sep 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#1

CSV-Datei mit /sb

  Alt 25. Sep 2018, 18:18
Habe eine csv-Datei von einem Kunden erhalten, wo ein hin und wieder vorkommendes "/sb" im Text (in dem freien Info-Feld) dazu führt, dass -per Stringlist.loadfromfile - an dieser Stelle ein Zeilenumbruch stattfindet.

Wenn ich die Datei in Notepad.exe öffne, findet der Umbruch nicht statt, die Datei hat 21609 Datensätze, mit Delphi Stringlist geöffnet sind es aber 27704 Datensätze.

Hat jemand eine Ahnung, warum das so ist und wie man es hinbekommt, dass auch die Stringlist nur 21609 Zeilen generiert?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: CSV-Datei mit /sb

  Alt 25. Sep 2018, 18:36
Kannst du mal eine Beispieldatei und etwas Code zeigen, mit dem man das nachstellen kann?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#3

AW: CSV-Datei mit /sb

  Alt 25. Sep 2018, 18:40
Hilft das eventuell? : http://docwiki.embarcadero.com/Libra...trictDelimiter
  Mit Zitat antworten Zitat
Drecktrah
(Gast)

n/a Beiträge
 
#4

AW: CSV-Datei mit /sb

  Alt 25. Sep 2018, 19:00
"/sb" kommt vermutlich 27704 - 21609 = 6095 mal im Text vor?
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: CSV-Datei mit /sb

  Alt 25. Sep 2018, 19:26
OK, habe da mal genauer mit einem Hex-Editor reingesehen. Nach /sb folgt "0A" (oder asci #10), was ja einen zeilenvorschub repräsentiert.

Die Stringlist macht nach dem einlesen (Stringlist.loadfromfile) aber da ein #13#10 draus.

/sb könnte ja für "soft break" stehen oder so.

Ist mir jedenfalls noch nicht untergekommen.

Mein Problem kann ich erst mal lösen, indem ich nach dem Einlesen der Datei z.B.

stringlist.text := ReplaceStr (stringlist.text, '/sb' + #13#10, ' ');

aufrufe, um die richtige Zeilenzahl zu bekommen.

(tatsächlich werde ich es nicht durch ein Leerzeichen ersetzen, sondern durch ein anderes Sonderzeichen, dass in meinen mehrzeiligen Feldern (Memo) den Zeilenumbruch repräsentiert).

Interessant finde ich aber, dass Windows Notepad so eine Zeile als eine Zeile einliest...

Nachtrag: Windows-Notepad ignoriert einfach #10 Zeichen und macht keinen neue Zeile auf, auch ohne /sb

Soweit ich das jetzt raus gefunden habe, wird in diesem Feld, das mehrzeiligen Text repräsentiert, das erste #10-Zeichen mit /sb eingeleitet, es können aber noch weitere #10 Zeichen (ohne /sb Einleitung) innerhalb des Textes für dieses Feld vorkommen.

Kann das irgendein Standard sein? Sehe ich jedenfalls zum ersten mal.

Suchen und ersetzen reicht da nicht, da muss ich das wohl als Memorystream einlesen und jedes einzelne #10 Zeichen, das nicht im Verbund mit #13#10 steht, eliminieren (bzw. durch mein eigenes Kennzeichen ersetzen)....

Geändert von Harry Stahl (25. Sep 2018 um 19:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: CSV-Datei mit /sb

  Alt 25. Sep 2018, 20:11
OK, habe da mal genauer mit einem Hex-Editor reingesehen. Nach /sb folgt "0A" (oder asci #10), was ja einen zeilenvorschub repräsentiert.
Gerade Notepad hat das Problem, dass es #10 nicht als Zeilenumbruch, sondern als Zeichen interpretiert.
Und da für #10 im Font nichts hinterlegt ist, hat das in der Anzeige eine Breite von 0, was du nur bemerkst, wenn du mit den Cursortasten zeichenweise durch den Text gehst.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: CSV-Datei mit /sb

  Alt 26. Sep 2018, 08:50
Wenn man mit csv-Dateien hantiert, ist "Zeile" ein untauglicher Begriff. en Datensatz wird durch x0D0A (#13#10) begrenzt, es sei denn diese Zeichenkombination befindet sich zwischen zwei " dann handelt es sich um ein (text)Feld das einen mehrzeiligen Text enthält.

Eine csv-Datei mit dem Notepad zu öffnen oder sie in eine Stringliste einzulesen, ist nicht in jedem fall zuverlässig und eignet sich allenfalls, um einen Überblick zu erhalten.

Gruß
K-H

U.U. kann man auch andere Vereinbarungen bezgl. der Feld und Satz-seperatoren treffen, aber das ist Vereinbarungssache.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (26. Sep 2018 um 08:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: CSV-Datei mit /sb

  Alt 26. Sep 2018, 09:22
NotePad++ ist die bessere Lösung zur Fehlersuche in solchen Dateien. Da kann man sich die "Steuerzeichen" anzeigen lassen und sieht eigentlich sehr schnell was los ist.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: CSV-Datei mit /sb

  Alt 26. Sep 2018, 13:07
Was alles unter ".csv" so kursiert ist zwar nicht ganz zufällig, aber oft ist es nicht mal das Comma, aus Comma-Separated-Values, was man als Trenner findet.
[quote]..
As indicated by carriage return or linefeed characters, each line in the file is then appended in the list as a string.
..[quote]
http://docs.embarcadero.com/products...le@string.html

Auch da kann man sich über die Formulierung streiten, aber es wird jedenfalls beschrieben, das 2 verschiedene Zeichen als Delimiter des Zeilenendes akzeptiert werden.

Die Funktion tut also erstmal, was sie soll, oder?
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: CSV-Datei mit /sb

  Alt 26. Sep 2018, 13:39
Das ist hardcoded in TStrings.SetTextStr .

          while not (P^ in [#0, #10, #13]) do Inc(P);

Da die Methode aber virtuell ist, könntest du die überschreiben und durch einen für diesen Fall passenden Code ersetzen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 17:14 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