Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringList -> StringReplace "verschluckt" letztes Zeichen (https://www.delphipraxis.net/110974-stringlist-stringreplace-verschluckt-letztes-zeichen.html)

incognito 27. Mär 2008 15:59


StringList -> StringReplace "verschluckt" letzt
 
Hallo Leute,

zum Einlesen einer csv-Datei in meine Datenbank benutze ich zwei Stringlisten:

Delphi-Quellcode:

....

var
  masterslist : TStringList;
  detailslist : TStringList;
  index        : Integer;
begin
  masterslist := TStringList.Create;
  detailslist := TStringList.Create;
  try
    detailslist.Delimiter := ';';  
    masterslist.LoadFromFile(Edit_DATEI.Text);
    for index := 1 to Pred (masterslist.Count) do
    begin
      detailslist.Clear;
      detailslist.DelimitedText := '"' + StringReplace(masterslist.Strings[index],';','";"',[rfReplaceAll]);
     //ShowMessage(masterslist.Strings[index]);
     //ShowMessage(detailslist.Strings[3]);

....
Wenn ich mir die Strings der Masterlist ansehe (showMessage) dann stimmt noch alles, sehe ich mir den letzten String in der Detailslist an, dann fehlt der letzte Buchstabe des String. Wenn hinter dem letzten Buchstaben, also vor dem Zeilenende, ein Leerzeichen steht, dann fehlt der letzte Buchstabe nicht. Ich hab keine Ahnung, woran das liegen kann?!? Ich hoffe ihr könnt mir da weiterhelfen und habt evtl. einen Tip, wie ich das Problem lösen kann?!?!

Danke schonmal!

Jana

xZise 27. Mär 2008 16:37

Re: StringList -> StringReplace "verschluckt" l
 
Ist den ".DelimitedText" die richtige eigenschaft?

Bräuchtest du nicht ".Text"? Ist aber nur geraten, da ich mich noch nicht so mit ".DelimitedText" auseinandergesetzt habe.

MfG
xZise

RavenIV 27. Mär 2008 17:04

Re: StringList -> StringReplace "verschluckt" l
 
Müsst es nicht heissen:
Delphi-Quellcode:
for index := 0 to masterslist.Count -1  do
und anstelle von
Delphi-Quellcode:
detailslist.Delimiter := ';';
würde ich mal dies probieren:
Delphi-Quellcode:
masterslist.Delimiter := ';';

incognito 27. Mär 2008 17:07

Re: StringList -> StringReplace "verschluckt" l
 
Zitat:

Zitat von xZise
Ist den ".DelimitedText" die richtige eigenschaft?

Bräuchtest du nicht ".Text"? Ist aber nur geraten, da ich mich noch nicht so mit ".DelimitedText" auseinandergesetzt habe.

MfG
xZise

Hallo xZise,

ich möchte die einzelnen Einträge einer Zeile

Eintrag A;Eintrag B;Eintrag C
Eintrag A;Eintrag B;Eintrag C


in jeweils eine Spalte (A,B,C) der DB-Tabelle schreiben. Die "Spalten" sind mit ' ; ' getrennt und mit DelimitedText kann ich mit dem Delimiter angeben, wonach die Spalten getrennt werden sollen. Die Eigenschaft TEXT trennt glaub ich nach Zeilenumbruch, bin mir nicht ganz sicher.

In meinem Fall fehlt nun allerdings immer der Buchstabe C ... :(

mkinzler 27. Mär 2008 17:11

Re: StringList -> StringReplace "verschluckt" l
 
Ein Leerzeichen immer auch ein Trenner. Ab D7 kann man das durch Setzen der Eigenschaft .StrictDelimiter auf True unterbinden.

incognito 27. Mär 2008 17:17

Re: StringList -> StringReplace "verschluckt" l
 
Hallo RavenIV,


Zitat:

Zitat von RavenIV
Müsst es nicht heissen:
Delphi-Quellcode:
for index := 0 to masterslist.Count -1  do

Die Funktion PRED gibt den Vorgänger zurück, sollte also auf dasselbe hinauslaufen :wink:

Zitat:

Zitat von RavenIV
und anstelle von
Delphi-Quellcode:
detailslist.Delimiter := ';';
würde ich mal dies probieren:
Delphi-Quellcode:
masterslist.Delimiter := ';';

Die Masterlist muss ja eigentlich nicht schon getrennt werden. Soll erstmal Zeile für Zeile die Datei einlesen. Die Strings müssen dann in der detailslist getrennt werden, damit ich sie in die Spalten einlesen kann. Oder warum meinst du, sollte ich den Delimiter für die Masterlist setzen??

incognito 27. Mär 2008 17:21

Re: StringList -> StringReplace "verschluckt" l
 
Zitat:

Zitat von mkinzler
Ein Leerzeichen immer auch ein Trenner. Ab D7 kann man das durch Setzen der Eigenschaft .StrictDelimiter auf True unterbinden.

Wo kann ich diese Eigenschaft setzen? Bei meiner Stringlist wird sie mir nicht angeboten.
Merkwürdig ist ja, das gerade MIT dem Leerzeichen am Ende der letzte Buchstabe da ist. Nur wenn keins am Ende steht, fehlt das letzte Zeichen :(

mkinzler 27. Mär 2008 17:26

Re: StringList -> StringReplace "verschluckt" l
 
Welche Delphiversion hast du?

grenzgaenger 27. Mär 2008 18:26

Re: StringList -> StringReplace "verschluckt" l
 
Schau dir mal den Post an. Denke, er ist genau das was du brauchst. <HTH>


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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 by Thomas Breitkreuz