Avatar billede smith1 Nybegynder
05. februar 2004 - 09:50 Der er 7 kommentarer

load en *.txt fil ind i en listview

hvordan kan jeg load en *.txt fil ind i en listview hvor jeg har sat viewstyle til vsReport. og har 4 columns?
Avatar billede smith1 Nybegynder
05. februar 2004 - 11:32 #1
er der ikke nogen der kan hjælpe?? jeg kan godt give nogen flere point hvis det er det der skal til
Avatar billede hrc Mester
05. februar 2004 - 13:28 #2
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.

procedure TForm1.Load(aFileName : string; aListView : TListView);

  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;
Avatar billede hrc Mester
05. februar 2004 - 13:30 #3
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..).
Avatar billede hrc Mester
05. februar 2004 - 13:32 #4
Desuden kan variablen "p" fjernes fra hovedproceduren

procedure TForm1.Load(aFileName : string; aListView : TListView);

  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.
Avatar billede ibhe Novice
15. februar 2004 - 05:37 #5
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;

mvh ib
Avatar billede hrc Mester
15. februar 2004 - 19:10 #6
CommaText er jeg sgu ikke stødt på før. Smart.
Avatar billede ibhe Novice
16. februar 2004 - 01:18 #7
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester