/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Indhold af textfile til Array ??
Fra : SpookiePower


Dato : 06-01-02 13:59

Jeg er igang med et lille program hvor jeg gerne vil have
indholdet af en textfile smidt over i et Array. Men det jeg
har lavet virker ikke. Når programmet når til Sortering[I] := S;
kommer den op med en fejl og nævner en adresse i
programmets exe file. Hvad har jeg gjort forkert ??


Var
S : String;
I : Byte;
Sortering : Array of String;
begin
I := 0;
AssignFile(TextFileTest,Filenavn);
Reset(TextFileTest);
while not EOF(TextFileTest) do
Begin
I := I + 1;
ReadLn(TextFileTest,S);
Sortering[I] := S;
end;
CloseFile(TextFileTest);
end;



 
 
SpookiePower (06-01-2002)
Kommentar
Fra : SpookiePower


Dato : 06-01-02 14:21

Jeg fik programmet til at virker hvis jeg skrev

Var
Sortering : Array of String[1..10];

Istedet for Sortering : Array of String;

Men da jeg ikke ved hvor meget der står i textfilen, skulle
Array'et jo helst være et dynamisk Array. Kan nogle hjælpe
mig med det problem ?



Thomas Finnerup (06-01-2002)
Kommentar
Fra : Thomas Finnerup


Dato : 06-01-02 14:33

On Sun, 6 Jan 2002 13:59:17 +0100, "SpookiePower"
<boxjunk2600@hotmail.com> wrote:

> Jeg er igang med et lille program hvor jeg gerne vil have
> indholdet af en textfile smidt over i et Array. Men det jeg
> har lavet virker ikke. Når programmet når til Sortering[I] := S;
> kommer den op med en fejl og nævner en adresse i
> programmets exe file. Hvad har jeg gjort forkert ??

Jeg har ikke arbejdet med dynamiske arrays i Delphi, men jeg mener at
du skal bruge SetLength() hver gang du vil udvide et array. Prøv
f.eks. at indsætte SetLength(Sortering, I); før Sortering[I] := S;


- Thomas


SpookiePower (06-01-2002)
Kommentar
Fra : SpookiePower


Dato : 06-01-02 14:50


"Thomas Finnerup" <TF@Picco.dk> wrote in message
news:ubkg3us1d6dk9ur6aif1jbegdkh0pjrlp5@4ax.com...

<Snip>

> Jeg har ikke arbejdet med dynamiske arrays i Delphi, men jeg mener at
> du skal bruge SetLength() hver gang du vil udvide et array. Prøv
> f.eks. at indsætte SetLength(Sortering, I); før Sortering[I] := S;
>
>
> - Thomas
>

Det virker nu.....men så er der opstået et problem et andet sted i mit
program.
Her prøver jeg at indlæse indholdet af Arrayet til en listbox. Det virkede
fint
med et Statisk Array. Men nu virker det ikke med et dynamisk array.

begin
For I := 1 to Length(Sortering) do
Begin
S := Sortering[I];
ListBox1.Items.Add(S);
end;
end;



Thomas Finnerup (06-01-2002)
Kommentar
Fra : Thomas Finnerup


Dato : 06-01-02 15:59

On Sun, 6 Jan 2002 14:49:47 +0100, "SpookiePower"
<boxjunk2600@hotmail.com> wrote:

> Det virker nu.....men så er der opstået et problem et andet sted i mit
> program. Her prøver jeg at indlæse indholdet af Arrayet til en listbox.
> Det virkede fint med et Statisk Array. Men nu virker det ikke med et
> dynamisk array.
>
> begin
> For I := 1 to Length(Sortering) do
> Begin
> S := Sortering[I];
> ListBox1.Items.Add(S);
> end;
> end;

Husk at array-indexes som så meget andet starter ved 0. Prøv at
udskifte din For-linie med

For I := 0 to Length(Sortering) - 1 do


- Thomas


SpookiePower (06-01-2002)
Kommentar
Fra : SpookiePower


Dato : 06-01-02 16:25


"Thomas Finnerup" <TF@Picco.dk> wrote in message
news:dfpg3ukpjmgcuurnuluf2ug0qfflordop9@4ax.com...
> On Sun, 6 Jan 2002 14:49:47 +0100, "SpookiePower"

<Snip>
>
> Husk at array-indexes som så meget andet starter ved 0. Prøv at
> udskifte din For-linie med
>
> For I := 0 to Length(Sortering) - 1 do
>
> - Thomas

Tak skal du have.





Uffe Kousgaard (06-01-2002)
Kommentar
Fra : Uffe Kousgaard


Dato : 06-01-02 17:47

"SpookiePower" <boxjunk2600@hotmail.com> wrote in message
news:a19klu$2f2t$1@news.cybercity.dk...
> begin
> For I := 1 to Length(Sortering) do
> Begin
> S := Sortering[I];
> ListBox1.Items.Add(S);
> end;
> end;
>
Med mindre du kalder setlength én gang for hver linie, du læser fra
filen og dermed øger længden med én plads for hver gang, vil ovenstående
ikke virke, da length vil returnere et større antal end der er fyldt op.

Hvis du har lavet det, så pladsen øges med én af gangen, er det et
utroligt langsom program du har fået strikket sammen. Øg med 10% af
gangen eller lignende og hold så styr på antallet af linier, der
egentlig er læst ind. Det samme foregår også internt i TStringList, men
den er du nok afskåret fra at bruge til eksamen?

Hilsen
Uffe



SpookiePower (06-01-2002)
Kommentar
Fra : SpookiePower


Dato : 06-01-02 18:09


"Uffe Kousgaard" <uffe@routeware.dk> wrote in message
news:3c387f64$0$62897$edfadb0f@dspool01.news.tele.dk...

> > begin
> > For I := 1 to Length(Sortering) do
> > Begin
> > S := Sortering[I];
> > ListBox1.Items.Add(S);
> > end;
> > end;
> >
> Med mindre du kalder setlength én gang for hver linie, du læser fra
> filen og dermed øger længden med én plads for hver gang, vil ovenstående
> ikke virke, da length vil returnere et større antal end der er fyldt op.
<Snip>

Hvergang jeg læser een linie fra filen, øger jeg Array'et med een plads
SetLength(Sortering, I+1); // Kunne ikke få det til at virke uden +1.

Men når jeg så vil overføre indholdet fra Arrayet, vil der så ikke "bare"
være en
masse tomme pladser tilsidste i Arrayet. Men det vil da blive udskrevet til
skærmen alligevel.....med tomme pladser tilsidst.














> Hvis du har lavet det, så pladsen øges med én af gangen, er det et
> utroligt langsom program du har fået strikket sammen. Øg med 10% af
> gangen eller lignende og hold så styr på antallet af linier, der
> egentlig er læst ind. Det samme foregår også internt i TStringList, men
> den er du nok afskåret fra at bruge til eksamen?
>
> Hilsen
> Uffe
>
>



PL (06-01-2002)
Kommentar
Fra : PL


Dato : 06-01-02 14:51

Hej SpookiePower

Er der nogen speciel grund til, at du vil bruge 'Array of String'?
Umiddelbart er der den løsning med TStringlist, hvor der også er en
Sort-funktion med.

PL





SpookiePower (06-01-2002)
Kommentar
Fra : SpookiePower


Dato : 06-01-02 14:58


"PL" <jessie-peter@get2net.dk> wrote in message
news:a19krj$fkd$1@sunsite.dk...
> Hej SpookiePower
>
> Er der nogen speciel grund til, at du vil bruge 'Array of String'?
> Umiddelbart er der den løsning med TStringlist, hvor der også er en
> Sort-funktion med.
>
> PL

Ja, jeg skal snart til min første programmerings eksamen, så jeg sidder og
leger lidt med Arrays og prøver at bruge dem på forskellige måder.



Niels Aage Schmidt (06-01-2002)
Kommentar
Fra : Niels Aage Schmidt


Dato : 06-01-02 16:56

Bortset fra dette, er jeg helt enig i at TStringList bare er det helt
rigtige.
Jeg jonglerer rundt med ca. 200000 kodede tekststrenge i fire StringLists og
det går bare hurtigt og helt uden problemer.
Husk bare at Create og Free dem.

hilsen Niels Aage


"SpookiePower" <boxjunk2600@hotmail.com> skrev i en meddelelse
news:a19l54$2fmd$1@news.cybercity.dk...
>
> "PL" <jessie-peter@get2net.dk> wrote in message
> news:a19krj$fkd$1@sunsite.dk...
> > Hej SpookiePower
> >
> > Er der nogen speciel grund til, at du vil bruge 'Array of String'?
> > Umiddelbart er der den løsning med TStringlist, hvor der også er en
> > Sort-funktion med.
> >
> > PL
>
> Ja, jeg skal snart til min første programmerings eksamen, så jeg sidder og
> leger lidt med Arrays og prøver at bruge dem på forskellige måder.
>
>



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste