/ 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
Kan man gemme Record direkte i en fil?
Fra : Kurt G


Dato : 04-01-10 09:07

Jeg har erklæret en type således:

Type
PostType = Record
PNr : Integer;
PTitel : String;
.....
End;

Og derefter:

Var
DataTabel : Array of Posttype;

Kan man gemme denne tabel direkte til en fil som f.eks. med en Listbox?

Mvh Kurt



 
 
Uffe Kousgaard (04-01-2010)
Kommentar
Fra : Uffe Kousgaard


Dato : 04-01-10 10:03

"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:4b41a1ee$0$275$14726298@news.sunsite.dk...
>
> Kan man gemme denne tabel direkte til en fil som f.eks. med en Listbox?

Nej, du skal selv skrive kode, der gemmer indholdet og evt. læser det
tilbage igen.

Pga. din string (pointer-type, variabel længde) kan du ikke bare lave det
som "file of posttype", men bør nok vælge en kommasepareret fil á la:

4000,"Roskilde"
6000,"Kolding"
etc.

Men det kommer helt an på, hvad du har tænkt dig at gøre med filen.



Kurt G (05-01-2010)
Kommentar
Fra : Kurt G


Dato : 05-01-10 17:43

"Uffe Kousgaard" <oh@no.no> skrev i en meddelelse
news:4b41aeb2$0$274$14726298@news.sunsite.dk...
> "Kurt G" <kurt_g@guldbaek.net> wrote in message
> news:4b41a1ee$0$275$14726298@news.sunsite.dk...
>>
>> Kan man gemme denne tabel direkte til en fil som f.eks. med en Listbox?
>
> Nej, du skal selv skrive kode, der gemmer indholdet og evt. læser det
> tilbage igen.
>
> Pga. din string (pointer-type, variabel længde) kan du ikke bare lave det
> som "file of posttype", men bør nok vælge en kommasepareret fil á la:
>
> 4000,"Roskilde"
> 6000,"Kolding"
> etc.
>
> Men det kommer helt an på, hvad du har tænkt dig at gøre med filen.
>
Det tænkte jeg nok!
Jeg har i forvejen lavet det til en i mit tilfælde '|'-separeret fil, da der
kan forekomme komma og semikolon i indholdet.
Tak for svaret, Uffe!
Mvh Kurt



Uffe Kousgaard (05-01-2010)
Kommentar
Fra : Uffe Kousgaard


Dato : 05-01-10 19:34

"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:4b436c1e$0$274$14726298@news.sunsite.dk...
> >
> > 4000,"Roskilde"
> > 6000,"Kolding"
> > etc.
> >
> Jeg har i forvejen lavet det til en i mit tilfælde '|'-separeret fil, da
der
> kan forekomme komma og semikolon i indholdet.

Hvis du anvender samme system som jeg har vist (dvs. " omkring tekstfelter),
kan en TStringList læse dit indhold direkte. Uanset om der er kommaer inde i
teksten.



Kurt G (07-01-2010)
Kommentar
Fra : Kurt G


Dato : 07-01-10 21:47

"Uffe Kousgaard" <oh@no.no> skrev i en meddelelse
news:4b438610$0$271$14726298@news.sunsite.dk...
> "Kurt G" <kurt_g@guldbaek.net> wrote in message
> news:4b436c1e$0$274$14726298@news.sunsite.dk...
>> >
>> > 4000,"Roskilde"
>> > 6000,"Kolding"
>> > etc.
>> >
>> Jeg har i forvejen lavet det til en i mit tilfælde '|'-separeret fil, da
> der
>> kan forekomme komma og semikolon i indholdet.
>
> Hvis du anvender samme system som jeg har vist (dvs. " omkring
> tekstfelter),
> kan en TStringList læse dit indhold direkte. Uanset om der er kommaer inde
> i
> teksten.
>
Det skal jeg vist have pindet mere ud!
Det minder om det format man får ved eksport af en database til txt-fil.
Jeg forstår godt, at man med TStringList kan hente filen ind, men ikke
hvordan det skal bruges, når den er inde.
Den skal jo splittes op i sine elementer og så vidt jeg ved, har vi ikke i
Delphi en lignende funktion som SPLIT i VBA!
Skal det ikke gøres på ved hjælp af

Tal := Pos('|',Tmp1);
If Tal > 1 Then
Begin
DataTabel[Ptr].PKlassisk := StrToInt(Copy(Tmp1, 1,Tal-1));
osv

Findes der i TStringList en genvej?

Mvh Kurt



Uffe Kousgaard (07-01-2010)
Kommentar
Fra : Uffe Kousgaard


Dato : 07-01-10 22:33

"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:4b4649d8$0$278$14726298@news.sunsite.dk...

> Den skal jo splittes op i sine elementer og så vidt jeg ved, har vi ikke i
> Delphi en lignende funktion som SPLIT i VBA!

Du bruger TStringList.commatext til at splitte linierne med. Ikke til at
læse hele filen med. Der læser du fortsat én linie ad gangen.



Stig Johansen (08-01-2010)
Kommentar
Fra : Stig Johansen


Dato : 08-01-10 00:05

Uffe Kousgaard wrote:

> Du bruger TStringList.commatext til at splitte linierne med. Ikke til at
> læse hele filen med. Der læser du fortsat én linie ad gangen.

Han skal nok nærmere bruge delimitedtext med venner, da han bruger | som
delimiter.

@Kurt
Du skal have 2 TStringlist, en med filen, og en til at læse linierne med.

--
Med venlig hilsen
Stig Johansen

Uffe Kousgaard (08-01-2010)
Kommentar
Fra : Uffe Kousgaard


Dato : 08-01-10 08:56

"Stig Johansen" <wopr.dk@gmaill.com> wrote in message
news:4b466896$0$281$14726298@news.sunsite.dk...
> Uffe Kousgaard wrote:
>
>> Du bruger TStringList.commatext til at splitte linierne med. Ikke til at
>> læse hele filen med. Der læser du fortsat én linie ad gangen.
>
> Han skal nok nærmere bruge delimitedtext med venner, da han bruger | som
> delimiter.

Nu gik mit forslag jo netop på at skifte | ud med ,

> @Kurt
> Du skal have 2 TStringlist, en med filen, og en til at læse linierne med.

Man skal kun bruge TSTringList til at læse filer med, hvis man er sikker på,
at filerne ikke er for store. Ellers er det den sikre vej til RAM-problemer.



Kurt G (08-01-2010)
Kommentar
Fra : Kurt G


Dato : 08-01-10 09:54

"Uffe Kousgaard" <oh@no.no> skrev i en meddelelse
news:4b4652f0$0$283$14726298@news.sunsite.dk...
> "Kurt G" <kurt_g@guldbaek.net> wrote in message
> news:4b4649d8$0$278$14726298@news.sunsite.dk...
>
>> Den skal jo splittes op i sine elementer og så vidt jeg ved, har vi ikke
>> i
>> Delphi en lignende funktion som SPLIT i VBA!
>
> Du bruger TStringList.commatext til at splitte linierne med. Ikke til at
> læse hele filen med. Der læser du fortsat én linie ad gangen.
>
Efter de to sidste indlæg er jeg igen forvirret (måske på et lidt højere
niveau)!

Vil du give et eksempel på TStringList.commatext til at splitte linierne
med?

Mvh Kurt



Uffe Kousgaard (08-01-2010)
Kommentar
Fra : Uffe Kousgaard


Dato : 08-01-10 13:21

"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:4b46f62e$0$269$14726298@news.sunsite.dk...
>
> Vil du give et eksempel på TStringList.commatext til at splitte linierne
> med?

s:= '12,23,"tekst"';
SL.commatext := s;
for i:= 0 to SL.count-1 do
showmessage(SL.strings[i]);



Kurt G (08-01-2010)
Kommentar
Fra : Kurt G


Dato : 08-01-10 13:49

"Uffe Kousgaard" <oh@no.no> skrev i en meddelelse
news:4b472337$0$281$14726298@news.sunsite.dk...
> "Kurt G" <kurt_g@guldbaek.net> wrote in message
> news:4b46f62e$0$269$14726298@news.sunsite.dk...
>>
>> Vil du give et eksempel på TStringList.commatext til at splitte linierne
>> med?
>
> s:= '12,23,"tekst"';
> SL.commatext := s;
> for i:= 0 to SL.count-1 do
> showmessage(SL.strings[i]);
>
Tak for det, Uffe!
Da jeg ville prøve det, fik jeg samme fejl som jeg lige har skrevet om i mit
nye indlæg!
Mvh Kurt



Stig Johansen (08-01-2010)
Kommentar
Fra : Stig Johansen


Dato : 08-01-10 14:50

"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:4b472a16$1$279$14726298@news.sunsite.dk...
> Da jeg ville prøve det, fik jeg samme fejl som jeg lige har skrevet om i
mit
> nye indlæg!

Hvis du husker det der program til a hente data fra en hjemme side, så har
jeg udvidet det med 2 listbokse, hvor jeg illusterer bruge af disse
stringlists.

Udvidelserne er:
.... tilføj 2 listboxe...
FilSomListbox: TListBox;
Linier: TListBox;
.....
Lav en click event handler:
.....
procedure FilSomListboxClick(Sender: TObject);
.....

Og den samlede kode for unit'en kurtU ser nu sådan ud:
.....
unit KurtU;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

const
Timeout = 10000 ; // 10 sec.
type
TForm1 = class(TForm)
Label1: TLabel;
url: TEdit;
Button2: TButton;
Tekstfil: TMemo;
Button1: TButton;
HTTPResult: TMemo;
FilSomListbox: TListBox;
Linier: TListBox;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FilSomListboxClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses
HTTPSend,synautil,SynaCode ;

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
VAR
SynaHTTP: THTTPSend;
begin
SynaHTTP := THTTPSend.Create;
SynaHTTP.Timeout := Timeout ;
SynaHTTP.Clear ;
SynaHTTP.HTTPMethod('GET', url.Text );
TRY
Tekstfil.Lines.LoadFromStream(SynaHTTP.Document);
SynaHTTP.Document.Position := 0 ;
FilSomListbox.Items.LoadFromStream(SynaHTTP.Document);
except
end;
SynaHTTP.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
VAR
SynaHTTP: THTTPSend;
PostData : STRING ;
begin
SynaHTTP := THTTPSend.Create;
SynaHTTP.Timeout := Timeout ;
SynaHTTP.Clear ;

PostData := 'Tekstfil=' + EncodeURLElement(Tekstfil.Text) ;
WriteStrToStream(SynaHTTP.Document, PostData);
SynaHTTP.MimeType := 'application/x-www-form-urlencoded';

SynaHTTP.HTTPMethod('POST', url.Text );

TRY
HTTPResult.Lines.LoadFromStream(SynaHTTP.Document);
except
end;
SynaHTTP.Free;
end;

procedure TForm1.FilSomListboxClick(Sender: TObject);
var
selectedline : integer ;
Workerlist : TStringlist ;
counter : integer ;
begin
Workerlist := TStringList.Create ;
selectedline := TListBox(Sender).ItemIndex;
Workerlist.Delimiter := ';' ;
Workerlist.QuoteChar := '"' ;
Linier.Items.Clear ;
Workerlist.DelimitedText := TListBox(Sender).Items[selectedline] ;

for counter := 0 to Workerlist.Count - 1 do begin
Linier.Items.Add('Itemnummer '+IntToStr(counter)+' - ' +
Workerlist.Strings[counter]) ;
end ;
Workerlist.Free ;
end;

end.
.....

Bemærk her brugen af workerlist (stringlist nr. 2), som Uffe ikke rigtig
kommer nærmere ind på.

Også Workerlist.Delimiter := ';' , hvor du kan udskifte ';' med '|'.

For en god ordens skyld vil jeg nævne, at dette er lavet i Delphi 7, så
muligvis virker det ikke i Delphi 5.

--
Med venlig hilsen/Best regards
Stig Johansen




Kurt G (08-01-2010)
Kommentar
Fra : Kurt G


Dato : 08-01-10 16:00

Hej.
Det husker jeg godt, men jeg kan ikke længere finde linken dertil, men det
er måske heller ikke nødvendigt.
Nu vil jeg se, om det også giver memoryproblemer.
Tak for hjælpen.

Mvh Kurt

"Stig Johansen" <wopr.dk@gmail.com> skrev i en meddelelse
news:4b4737b5$0$274$14726298@news.sunsite.dk...
> "Kurt G" <kurt_g@guldbaek.net> wrote in message
> news:4b472a16$1$279$14726298@news.sunsite.dk...
>> Da jeg ville prøve det, fik jeg samme fejl som jeg lige har skrevet om i
> mit
>> nye indlæg!
>
> Hvis du husker det der program til a hente data fra en hjemme side, så har
> jeg udvidet det med 2 listbokse, hvor jeg illusterer bruge af disse
> stringlists.
>
> Udvidelserne er:
> ... tilføj 2 listboxe...
> FilSomListbox: TListBox;
> Linier: TListBox;
> ....
> Lav en click event handler:
> ....
> procedure FilSomListboxClick(Sender: TObject);
> ....
>
> Og den samlede kode for unit'en kurtU ser nu sådan ud:
> ....
> unit KurtU;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
> Forms,
> Dialogs, StdCtrls;
>
> const
> Timeout = 10000 ; // 10 sec.
> type
> TForm1 = class(TForm)
> Label1: TLabel;
> url: TEdit;
> Button2: TButton;
> Tekstfil: TMemo;
> Button1: TButton;
> HTTPResult: TMemo;
> FilSomListbox: TListBox;
> Linier: TListBox;
> procedure Button2Click(Sender: TObject);
> procedure Button1Click(Sender: TObject);
> procedure FilSomListboxClick(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
> uses
> HTTPSend,synautil,SynaCode ;
>
> {$R *.dfm}
>
> procedure TForm1.Button2Click(Sender: TObject);
> VAR
> SynaHTTP: THTTPSend;
> begin
> SynaHTTP := THTTPSend.Create;
> SynaHTTP.Timeout := Timeout ;
> SynaHTTP.Clear ;
> SynaHTTP.HTTPMethod('GET', url.Text );
> TRY
> Tekstfil.Lines.LoadFromStream(SynaHTTP.Document);
> SynaHTTP.Document.Position := 0 ;
> FilSomListbox.Items.LoadFromStream(SynaHTTP.Document);
> except
> end;
> SynaHTTP.Free;
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> VAR
> SynaHTTP: THTTPSend;
> PostData : STRING ;
> begin
> SynaHTTP := THTTPSend.Create;
> SynaHTTP.Timeout := Timeout ;
> SynaHTTP.Clear ;
>
> PostData := 'Tekstfil=' + EncodeURLElement(Tekstfil.Text) ;
> WriteStrToStream(SynaHTTP.Document, PostData);
> SynaHTTP.MimeType := 'application/x-www-form-urlencoded';
>
> SynaHTTP.HTTPMethod('POST', url.Text );
>
> TRY
> HTTPResult.Lines.LoadFromStream(SynaHTTP.Document);
> except
> end;
> SynaHTTP.Free;
> end;
>
> procedure TForm1.FilSomListboxClick(Sender: TObject);
> var
> selectedline : integer ;
> Workerlist : TStringlist ;
> counter : integer ;
> begin
> Workerlist := TStringList.Create ;
> selectedline := TListBox(Sender).ItemIndex;
> Workerlist.Delimiter := ';' ;
> Workerlist.QuoteChar := '"' ;
> Linier.Items.Clear ;
> Workerlist.DelimitedText := TListBox(Sender).Items[selectedline] ;
>
> for counter := 0 to Workerlist.Count - 1 do begin
> Linier.Items.Add('Itemnummer '+IntToStr(counter)+' - ' +
> Workerlist.Strings[counter]) ;
> end ;
> Workerlist.Free ;
> end;
>
> end.
> ....
>
> Bemærk her brugen af workerlist (stringlist nr. 2), som Uffe ikke rigtig
> kommer nærmere ind på.
>
> Også Workerlist.Delimiter := ';' , hvor du kan udskifte ';' med '|'.
>
> For en god ordens skyld vil jeg nævne, at dette er lavet i Delphi 7, så
> muligvis virker det ikke i Delphi 5.
>
> --
> Med venlig hilsen/Best regards
> Stig Johansen
>
>
>



Kurt G (08-01-2010)
Kommentar
Fra : Kurt G


Dato : 08-01-10 16:38

"Stig Johansen" <wopr.dk@gmail.com> skrev i en meddelelse
news:4b4737b5$0$274$14726298@news.sunsite.dk...
> "Kurt G" <kurt_g@guldbaek.net> wrote in message
> news:4b472a16$1$279$14726298@news.sunsite.dk...
>> Da jeg ville prøve det, fik jeg samme fejl som jeg lige har skrevet om i
> mit
>> nye indlæg!
>
> Hvis du husker det der program til a hente data fra en hjemme side, så har
> jeg udvidet det med 2 listbokse, hvor jeg illusterer bruge af disse
> stringlists.
>
KLIPPET
>
> Bemærk her brugen af workerlist (stringlist nr. 2), som Uffe ikke rigtig
> kommer nærmere ind på.
>
> Også Workerlist.Delimiter := ';' , hvor du kan udskifte ';' med '|'.
>
> For en god ordens skyld vil jeg nævne, at dette er lavet i Delphi 7, så
> muligvis virker det ikke i Delphi 5.
>
> --
> Med venlig hilsen/Best regards
> Stig Johansen
>
Jeg har nu røvet programmet, men der kommer compilerfejl ved to linier:
Workerlist.Delimiter := ';' ;
Workerlist.QuoteChar := '"' ;
så D5 kender nok ikke dem!

Mvh Kurt



Uffe Kousgaard (08-01-2010)
Kommentar
Fra : Uffe Kousgaard


Dato : 08-01-10 20:33

"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:4b475332$0$271$14726298@news.sunsite.dk...

> så D5 kender nok ikke dem!

TStringList har fået tilføjet en del nyt siden D5, så ......



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste