|
| IN-fil => Stringlist => StringList Fra : Frederiksen |
Dato : 06-05-06 22:06 |
|
Hej.
Er der nogle, der har et bud på, hvordan følgende kan sammensættes.
Jeg har gemt nogle data i en inifil (jeg ved ikke, om det er bedre med en
anden type fil, fx txt-fil eller lign.)
Dataene som jeg har gemt er en overskrift, et kort navn og et langt navn for
en række poster.
Disse data skal overføres til en stringgrid. Jeg kunne ikke gøre det
direkte, så jeg forsøgte i stedet at placere det i en stringlist til at
starte med for så derefter at føre det over i en stringgrid.
Men begge dele er gået gal for mig.
Derfor håber jeg på hjælp til dels, hvordan jeg får en fils indhold overført
i en stringlist (jeg kender ikke antallet af poster i filen, kun antallet af
felter).
Derefter håber jeg på hjælp til, hvordan indhold af en stringlist kan
overføres til en stringgrid.
På forhånd tak for hjælpen.
| |
Erik Klausen (07-05-2006)
| Kommentar Fra : Erik Klausen |
Dato : 07-05-06 12:18 |
|
"Frederiksen" <msfrederiksen@ofir.dk> wrote in
news:445d0fb2$0$11162$ba624c82@nntp02.dk.telia.net:
> Er der nogle, der har et bud på, hvordan følgende kan sammensættes.
>
> Jeg har gemt nogle data i en inifil (jeg ved ikke, om det er bedre med
> en anden type fil, fx txt-fil eller lign.)
>
> Dataene som jeg har gemt er en overskrift, et kort navn og et langt
> navn for en række poster.
>
> Disse data skal overføres til en stringgrid. Jeg kunne ikke gøre det
> direkte, så jeg forsøgte i stedet at placere det i en stringlist til
> at starte med for så derefter at føre det over i en stringgrid.
>
> Men begge dele er gået gal for mig.
>
> Derfor håber jeg på hjælp til dels, hvordan jeg får en fils indhold
> overført i en stringlist (jeg kender ikke antallet af poster i filen,
> kun antallet af felter).
>
> Derefter håber jeg på hjælp til, hvordan indhold af en stringlist kan
> overføres til en stringgrid.
Altså, du har data liggende i en tekstfil, og målet er at få hver linie
opdelt i tre felter, som skal indsættes i en stringgrid, er det korrekt?
Det du mangler er kendskab til behandling af tekstfiler, og så er du
faldet over rutinerne til .INI-filer, lyder det til. Men .INI-filer er
beregnet til at holde linier af formen
<parameter>=<værdi>
og ganske uegnet som grenerelle tekstfil.
Måden du læser tekstfiler fremgår af følgende eksempel:
VAR
TekstLinie : String;
TekstFil : TextFile;
BEGIN
AssignFile( TekstFil, 'c:\data.txt' );
Reset( TekstFil );
WHILE NOT Eof( Tekstfil ) DO
BEGIN
Readln( TekstFil, TekstLinie );
(* Opdel linien i tre felter og tilføj til grid *)
END;
END;
Derved sparer du en StringList. Du kan også bruge Stringlist, på denne
måde:
VAR
I : Integer;
StringList : TStringList;
StringGrid : TStringGrid;
BEGIN
StringList.LoadFromFile( 'c:\data.txt' );
FOR I := 0 TO StringList.Count-1 DO
BEGIN
(* Referer til tekststrengen StringList.Strings[ I ], opdel i felter
og tilføj til grid *)
END
END;
men jeg tror ikke der er en hastighedsgevinst, tværtimod bruger du
dobbelt så meget hukommelse.
mvh.
Erik Klausen
| |
Frederiksen (08-05-2006)
| Kommentar Fra : Frederiksen |
Dato : 08-05-06 21:40 |
|
"Erik Klausen" <ekl@host.domain> skrev i en meddelelse
news:Xns97BC876F37389ErikKlausen@62.243.74.162...
Hej Erik.
> "Frederiksen" <msfrederiksen@ofir.dk> wrote in
> news:445d0fb2$0$11162$ba624c82@nntp02.dk.telia.net:
>
>> Er der nogle, der har et bud på, hvordan følgende kan sammensættes.
>>
>> Jeg har gemt nogle data i en inifil (jeg ved ikke, om det er bedre med
>> en anden type fil, fx txt-fil eller lign.)
>>
>> Dataene som jeg har gemt er en overskrift, et kort navn og et langt
>> navn for en række poster.
>>
>> Disse data skal overføres til en stringgrid. Jeg kunne ikke gøre det
>> direkte, så jeg forsøgte i stedet at placere det i en stringlist til
>> at starte med for så derefter at føre det over i en stringgrid.
>>
>> Men begge dele er gået gal for mig.
>>
>> Derfor håber jeg på hjælp til dels, hvordan jeg får en fils indhold
>> overført i en stringlist (jeg kender ikke antallet af poster i filen,
>> kun antallet af felter).
>>
>> Derefter håber jeg på hjælp til, hvordan indhold af en stringlist kan
>> overføres til en stringgrid.
>
> Altså, du har data liggende i en tekstfil, og målet er at få hver linie
> opdelt i tre felter, som skal indsættes i en stringgrid, er det korrekt?
Helt korrekt.
> Det du mangler er kendskab til behandling af tekstfiler, og så er du
> faldet over rutinerne til .INI-filer, lyder det til.
Jeg er bange for, at du igen har ret.
> Måden du læser tekstfiler fremgår af følgende eksempel:
>
> VAR
> TekstLinie : String;
> TekstFil : TextFile;
>
> BEGIN
> AssignFile( TekstFil, 'c:\data.txt' );
> Reset( TekstFil );
> WHILE NOT Eof( Tekstfil ) DO
> BEGIN
> Readln( TekstFil, TekstLinie );
> (* Opdel linien i tre felter og tilføj til grid *)
> END;
> END;
Ja, jeg har stadig ikke helt fundet noget visdom på biblioteket eller
nettet, der giver mig svar på, hvordan jeg kan opdele en linie i de 3 felter
og tilføje dem til min grid.
Det må være en generel handling, der ofte sker, men har ikke kunnet finde
noget. Måske leder jeg de forkerte steder og / eller efter de forkerte
ting/parametre
| |
Erik Klausen (08-05-2006)
| Kommentar Fra : Erik Klausen |
Dato : 08-05-06 23:20 |
|
"Frederiksen" <msfrederiksen@ofir.dk> wrote in
news:445fac9d$0$10871$ba624c82@nntp02.dk.telia.net:
> Ja, jeg har stadig ikke helt fundet noget visdom på biblioteket eller
> nettet, der giver mig svar på, hvordan jeg kan opdele en linie i de 3
> felter og tilføje dem til min grid.
>
> Det må være en generel handling, der ofte sker, men har ikke kunnet
> finde noget. Måske leder jeg de forkerte steder og / eller efter de
> forkerte ting/parametre
Som Harald skriver, må du nok vise os et eksempel på dine data.
Der er som regel to måder at dele en datalinie op på: Enten har data et
fast format, så første felt findes i position 1-15 (for eksempel), andet
felt findes i position 16-43 osv., eller også bliver de adskilt af et
specielt tegn, som regel komma.
Generelt kan du bruge funktionen Copy( Tekstlinie, startposition, antaltegn
) til at pille en delstreng ud af en streng. I tilfældet med fast format
vil du skrive
StringGrid1.Cells( 1, Linieno ) := Copy( TekstLinie, 1, 15 );
StringGrid1.Cells( 2, Linieno ) := Copy( TekstLinie, 16, 43-15 );
Hvis du har et skilletegn finder du skilletegnet med funktionen Pos(
Substreng, Streng ). Din kode bliver noget i stil med
StringGrid1.Cells( 1, Linieno ) :=
Copy( TekstLinie, 1, Pos( ',', TekstLinie )-1 );
Rest := Copy( TekstLinie, Pos( ',', TekstLinie )-1, 1000 );
StringGrid1.Cells( 2, Linieno ) :=
Copy( Rest, 1, Pos( ',', Rest )-1 );
mvh.
Erik Klausen
| |
Harald (08-05-2006)
| Kommentar Fra : Harald |
Dato : 08-05-06 22:14 |
|
"Frederiksen" <msfrederiksen@ofir.dk> skrev i en meddelelse
news:445d0fb2$0$11162$ba624c82@nntp02.dk.telia.net...
> Hej.
>
> Er der nogle, der har et bud på, hvordan følgende kan sammensættes.
>
> Jeg har gemt nogle data i en inifil (jeg ved ikke, om det er bedre med en
> anden type fil, fx txt-fil eller lign.)
>
> Dataene som jeg har gemt er en overskrift, et kort navn og et langt navn
> for en række poster.
>
> Disse data skal overføres til en stringgrid. Jeg kunne ikke gøre det
> direkte, så jeg forsøgte i stedet at placere det i en stringlist til at
> starte med for så derefter at føre det over i en stringgrid.
>
> Men begge dele er gået gal for mig.
>
> Derfor håber jeg på hjælp til dels, hvordan jeg får en fils indhold
> overført i en stringlist (jeg kender ikke antallet af poster i filen, kun
> antallet af felter).
>
> Derefter håber jeg på hjælp til, hvordan indhold af en stringlist kan
> overføres til en stringgrid.
>
> På forhånd tak for hjælpen.
har du et eks. på hvad din fil kan indeholde.
/HK
| |
Flozzy (09-05-2006)
| Kommentar Fra : Flozzy |
Dato : 09-05-06 06:24 |
|
Du kan gemme de 3 linier i en almindelig tekstfil i stedet for en INI-fil,
og evt. gøre sådan:
procedure TForm1.FormCreate(Sender: TObject);
begin
with TStringlist.Create do
begin
LoadFromFile('Some.txt');
with StringGrid1 do
begin
Cells[0,0] := Strings[0]; {eller brug en løkkestruktur til at fylde
cellerne med}
Cells[1,0] := Strings[1];
Cells[2,0] := Strings[2];
end;
Free;
end;
end;
Mvh. Flozzy
"Frederiksen" <msfrederiksen@ofir.dk> skrev i en meddelelse
news:445d0fb2$0$11162$ba624c82@nntp02.dk.telia.net...
> Hej.
>
> Er der nogle, der har et bud på, hvordan følgende kan sammensættes.
>
> Jeg har gemt nogle data i en inifil (jeg ved ikke, om det er bedre med en
> anden type fil, fx txt-fil eller lign.)
>
> Dataene som jeg har gemt er en overskrift, et kort navn og et langt navn
> for en række poster.
>
> Disse data skal overføres til en stringgrid. Jeg kunne ikke gøre det
> direkte, så jeg forsøgte i stedet at placere det i en stringlist til at
> starte med for så derefter at føre det over i en stringgrid.
>
> Men begge dele er gået gal for mig.
>
> Derfor håber jeg på hjælp til dels, hvordan jeg får en fils indhold
> overført i en stringlist (jeg kender ikke antallet af poster i filen, kun
> antallet af felter).
>
> Derefter håber jeg på hjælp til, hvordan indhold af en stringlist kan
> overføres til en stringgrid.
>
> På forhånd tak for hjælpen.
>
| |
Brian Andersen \(www~ (09-05-2006)
| Kommentar Fra : Brian Andersen \(www~ |
Dato : 09-05-06 07:34 |
|
Hvad med at anvende et Excel Dokument og via ADO integrere det i Delphi. Så
kan du anvende TDBGrid'en, som også muliggør, at du kan editere i data og
gemme dem igen i Excel dokumentet.
/Brian
| |
Frederiksen (09-05-2006)
| Kommentar Fra : Frederiksen |
Dato : 09-05-06 08:06 |
|
Hej og mange tak for svarene. Når jeg får ledig tid til at afprøve,
vil jeg gøre det.
I mellemtiden vil jeg lige give et eksempel på data som forespurgt.
Titel, langt navn, kort navn, nummer, tilhørende filnavn
fx
Medarbejder, Jens Jensen, JJ, 14, \datafiler\jj.doc
| |
Harald (09-05-2006)
| Kommentar Fra : Harald |
Dato : 09-05-06 08:39 |
|
"Frederiksen" <msfrederiksen@ofir.dk> skrev i en meddelelse
news:1147158345.553111.178930@i39g2000cwa.googlegroups.com...
Hej og mange tak for svarene. Når jeg får ledig tid til at afprøve,
vil jeg gøre det.
I mellemtiden vil jeg lige give et eksempel på data som forespurgt.
Titel, langt navn, kort navn, nummer, tilhørende filnavn
fx
Medarbejder, Jens Jensen, JJ, 14, \datafiler\jj.doc
-------------------------------
Her er en procedurer:
procedure FillGrid(Grid : TStringGrid; Filnavn : string);
var
Strings,Sub : TStringList;
i,c : integer;
begin
Strings:=TStringList.Create;
Sub:=TStringList.Create;
Strings.LoadFromFile(Filnavn);
for i:=0 to Strings.Count-1 do
begin
Sub.Clear;
ExtractStrings([','],[],PChar(Strings[i]),Sub);
for c:=0 to Sub.Count-1 do
Grid.Cells[c,i]:=Sub[c];
end;
Sub.Free;
Strings.Free;
end;
-----------------
Du kan kalde den sådan hvis du har en stringgrid der hedder StringGrid1 og
din fil hedder minfil.txt, jeg går ud fra at din fil er en "almindelig" text
fil og ikke en ini fil:
FillGrid(StringGrid1, 'minfil.txt');
/HK
| |
Frederiksen (09-05-2006)
| Kommentar Fra : Frederiksen |
Dato : 09-05-06 18:44 |
|
"Harald" <nomail@noname.dk> skrev i en meddelelse
news:44604712$0$84028$edfadb0f@dtext01.news.tele.dk...
> "Frederiksen" <msfrederiksen@ofir.dk> skrev i en meddelelse
> news:1147158345.553111.178930@i39g2000cwa.googlegroups.com...
> Hej og mange tak for svarene. Når jeg får ledig tid til at afprøve,
> vil jeg gøre det.
>
> I mellemtiden vil jeg lige give et eksempel på data som forespurgt.
>
> Titel, langt navn, kort navn, nummer, tilhørende filnavn
>
> fx
>
> Medarbejder, Jens Jensen, JJ, 14, \datafiler\jj.doc
>
> -------------------------------
>
> Her er en procedurer:
>
> procedure FillGrid(Grid : TStringGrid; Filnavn : string);
> var
> Strings,Sub : TStringList;
> i,c : integer;
> begin
> Strings:=TStringList.Create;
> Sub:=TStringList.Create;
> Strings.LoadFromFile(Filnavn);
> for i:=0 to Strings.Count-1 do
> begin
> Sub.Clear;
> ExtractStrings([','],[],PChar(Strings[i]),Sub);
> for c:=0 to Sub.Count-1 do
> Grid.Cells[c,i]:=Sub[c];
> end;
> Sub.Free;
> Strings.Free;
> end;
>
> -----------------
>
> Du kan kalde den sådan hvis du har en stringgrid der hedder StringGrid1 og
> din fil hedder minfil.txt, jeg går ud fra at din fil er en "almindelig"
> text fil og ikke en ini fil:
>
> FillGrid(StringGrid1, 'minfil.txt');
Perfect!
| |
|
|