|
| 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å ......
| |
|
|