![]() |
Delphi-Version: 2010
ExtractStrings und '
Hallo ihr Lieben,
mein Abschlussprojekt steht soweit und nun wollte ich mit den Echtdaten alles testen. Es geht ja darum, dass ich CSV-Dateien einlesen soll und die Daten auf eine Datenbank spielen, soweit die Kurzfassung. Was dazwischen noch so passiert, ist erst einmal unwichtig. Jedenfalls: erste Datei klappte wunderbar, zweite Datei - Fehlermeldung. Nach stundenlangen suchen bin ich darauf gestoßen, dass scheinbar das ExtractStrings nicht damit klar kommt, wenn diese Dinger hier ' in den Datensätzen sind. Hier mal der Code.
Delphi-Quellcode:
Ich lade erst von der Datei jede Zeile ein und lese dann die Zeilen einzeln aus, welche ich gerade benötige. Danach erstelle die Spalten.
procedure TDateiEinlesen_Frame.ReadFile;
var i: Integer; aBuffer: String; begin Datenliste:=TStringList.Create; Datenliste.LoadFromFile(Dateiname); for i := 0 to Datenliste.Count - 1 do begin aBuffer:=Datenliste.Strings[i]; aBuffer:= ';' + aBuffer + ';'; aBuffer:= StringReplace(aBuffer, '"', '', [rfReplaceAll]); // Das ganze Ersetzen ist notwendig, aBuffer:= StringReplace(aBuffer, ';;', ';NULL;', [rfReplaceAll]); //da wir von externen Stellen aBuffer:= StringReplace(aBuffer, ';;', ';NULL;', [rfReplaceAll]);//die Daten bekommen. Datenliste.Strings[i]:=aBuffer; end; INIinitialisieren; end; procedure TDateiEinlesen_Frame.CreateSpalten(aZeile: Integer); var Daten: PWideChar; begin Spaltenliste:=TStringList.Create; Daten:=PWideChar(Datenliste.Strings[aZeile]); ExtractStrings([';'],[' '],Daten,Spaltenliste); end; Wenn aber nun ein Name vorhanden ist á la "El'Barto", habe ich dann in einen String alles mit drin, was nach den Namen kommt, also so in etwa "El'Barto;Evergreen Terrece;Springfield;01.04.1982". Wenn ich nun die Spalten abfrage, um das INSERT zu basteln, knallt's regelmäßig, weil ich über das Listenmaximum gehe, ist ja klar. ;) Beim googeln bin ich schon darauf gestoßen, dass jmd. anderes schon das Problem hatte, aber leider gab's da keinen Lösungsvorschlag, den ich als sinnvoll erachtete. ![]() Nun brauch ich euch schlaue Leute. :cheer: Edit: Gerade hier d'rauf gestoßen: Separators are ignored when inside a quoted string until the final end quote. Jetzt weiß ich, WARUM das passiert, aber noch nicht, wie ich das umgehen kann. -.- |
AW: ExtractStrings und '
Hi,
ich habe mir für einen solchen Zweck mal eine eigene Prozedur geschrieben. Vielleicht hilft dir die weiter:
Delphi-Quellcode:
procedure DelimitedStringToStringList(s, sDelim: string; var SL: TStringList);
var i, ilen: Integer; sStr: string; begin SL.Clear; sStr := ''; ilen := Length(sDelim); i := 1; while (i <= Length(s)) do begin if (Copy(s, i, ilen) <> sDelim) then begin sStr := sStr + s[i]; Inc(i); end else begin SL.Add(sStr); sStr := ''; Inc(i, ilen); end; end; if sStr <> '' then SL.Add(sStr); end; Gruß |
AW: ExtractStrings und '
Delphi-Quellcode:
Stringlist.Delimiter:=';';
Stringlist.StrictDelimiter:= true; Stringlist.DelimitedText :='El''Barto;Evergreen Terrece;Springfield;01.04.1982' |
AW: ExtractStrings und '
Zitat:
Jetzt muss ich nur noch 'ne Lösung dafür finden, dass das einzelne Anführungszeichen bei "El'Barto" auch einzeln bleibt für den SQL-Quelltext. |
AW: ExtractStrings und '
Zitat:
|
AW: ExtractStrings und '
CSV-Dateien kann man fast immer mit einem Bulk Insert in die Zieldatenbank pusten. Das geht verdammt schnell. Wo soll's denn hingehen, also welches RDMBS ist das Ziel?
|
AW: ExtractStrings und '
Zitat:
Zitat:
Ich hoffe, ich habe dich so richtig verstanden, was du meintest. :) |
AW: ExtractStrings und '
Zitat:
// EDIT: ![]() |
AW: ExtractStrings und '
Zitat:
EDIT: Keine Sorgen, hab schon oft mit Parametern gearbeitet, gerade wenn es etwas dynamischer sein soll. :) So, das Problem gelöst, fehlen noch drei weitere. ;) Ich hasse die Phase der Tests auf Herz und Nieren. -.- |
AW: ExtractStrings und '
Zitat:
|
AW: ExtractStrings und '
Zitat:
|
AW: ExtractStrings und '
Zitat:
Das ist eine häufige und gefährliche ![]() Sieh zu dass du das ernsthaft behoben bekommst und nicht drumherum bastelst. Ich weiß nicht was das für ein Abschlussprojekt sein soll, aber ich würde sowas als Auditor nicht gut heißen! Liebe Grüße, Valentin |
AW: ExtractStrings und '
Würd mich ja noch mehr interessieren, wieviele solcher Auditoren die SQL injection überhaupt erkennen :-D
Und wenn nicht, den Prüfling durchlassen und selbst nachsitzen :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 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