Enten kan du lave en binær fil i det format som LoadFromFile bruger (men der kommer en masse andre oplysninger med) - desuden spørger du efter indlæsning af en tekstfil.
Jeg antager at du bruger ';' som separator og at der er præcis 3 af dem. Hvis det skal fungere bedre så bør man tjekke om der evt. er semikolonner inde i strengen.
function GetNextField(var aString : string) : string; var p : integer; begin p := pos(';',aString); result := copy(aString,1,p-1); delete(aString,1,p); end;
var fp : TextFile; st : string; i, p : integer; begin if not FileExists(aFileName) then exit;
assignfile(fp,aFileName); reset(fp); aListView.Items.BeginUpdate; try aListView.Items.Clear; while not eof(fp) do begi readln(fp,st); with aListView.Items.Add do begin Caption := GetNextField(aString); // Note! Triggers OnChange event SubItems.Add(GetNextField(aString)); SubItems.Add(GetNextField(aString)); SubItems.Add(GetNextField(aString)); end; // with end; // while finally aListView.Items.EndUpdate; CloseFile(fp); end; // try end;
Rettelse: Den sidste "SubItems.Add"-linie skal bare være "SubItems.Add(St);" og desuden er variabelnavnet ikke "aString", men "st" (Når det flyder som skidt fra en spædekalv, så sker der sjuskfejl..).
function GetNextField(var aString : string) : string; var p : integer; begin p := pos(';',aString); result := copy(aString,1,p-1); delete(aString,1,p); end;
var fp : TextFile; st : string; i : integer; begin if not FileExists(aFileName) then exit;
assignfile(fp,aFileName); reset(fp); aListView.Items.BeginUpdate; try aListView.Items.Clear; while not eof(fp) do begi readln(fp,st); with aListView.Items.Add do begin Caption := GetNextField(st); // Note! Triggers OnChange event SubItems.Add(GetNextField(st)); SubItems.Add(GetNextField(st)); SubItems.Add(st)); end; // with end; // while finally aListView.Items.EndUpdate; CloseFile(fp); end; // try end;
Mener ydermere at der faktisk er en "splitFelterFraenCSVfilOp" funktion - men kan ikke finde den.
Måske lidt fluekn..., men man kan hoppe lidt kode over ved at trække første felt ud af linien og gemme den i caption, og sætte resten af linien ind i subitems med kommandoen:
xxxx.subitems.commatext := st;
Det betyder at koden får følgende udseende:
function GetNextField(var aString : string) : string; var p : integer; begin p := pos(';',aString); result := copy(aString,1,p-1); delete(aString,1,p); end;
var fp : TextFile; st : string; i : integer; begin if not FileExists(aFileName) then exit;
assignfile(fp,aFileName); reset(fp); aListView.Items.BeginUpdate; try aListView.Items.Clear; while not eof(fp) do begi readln(fp,st); with aListView.Items.Add do begin Caption := GetNextField(st); // Note! Triggers OnChange event SubItems.commatext := st; SubItems.Add(st)); end; // with end; // while finally aListView.Items.EndUpdate; CloseFile(fp); end; // try end;
Der er ikke noget at sige til at du ikke er faldet over den, den er eddergodt skjult i hjælpesystemet, men faktisk kan man benytte den til alle Tstrings.
Kender du "DelimitedText", den er endnu mere flexibel end "commatext"?
mvh ib
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.