Parser
Zaključano
Zakačeno
samo beta verziju (bez source-a) ... ako odgovara :)
pa valjda ces naci i ideje ... mail me
pa valjda ces naci i ideje ... mail me
Mozes da malo vise das informacija o formatu u kome su zapisani
podaci u txt fajlu.
podaci u txt fajlu.
Potpis
People who think they know everything tend to irritate those of us who do.
Pa recimo imam bazu tipa: (PARADOX)
IME | PREZIME | TELEFON
i npr. u TXT fajlu imam
PERA | SIMIC | 333555
RASA | RASIC | 555666
...
i sada parser bi trebao da ovo ubaci u bazu podataka
tim redom i u odrdjeno polje!
IME | PREZIME | TELEFON
i npr. u TXT fajlu imam
PERA | SIMIC | 333555
RASA | RASIC | 555666
...
i sada parser bi trebao da ovo ubaci u bazu podataka
tim redom i u odrdjeno polje!
ja ovakve probleme resavam na silu: koristim temporary string u koji ubacim jednu liniju iz fajla, pa onda samo iskopiram odredjeni broj karaktera, pa zatim izbrisem onoliko koliko sam i iskopirao. Taj delimican string koji je iskopiran mozes dalje da putem Trim funkcije uredis (izbrises beline), pa ponovis postupak za drugi, treci element u redu itd.
Posle samo uzmes sledeci red i tako dok ne naidjes na eof.
Ovo radi samo ako ti elementi u redu zauzimaju isti broj mesta. Toplo ti preporucujem da ako ovo nije slucaj bolje preuredis txt fajl nego da komplikujes parser jer se lako moze desiti da pogresis; doduse, koriscenjem nekog nekarakteristicnog karaktera za razdvajanje elemenata nece mnogo iskomplikovati parser - tada samo koristis Pos('|', trenutni_red) funkciju da odredis do kog elementa da kopiras/brises trenutni red.
Ako treba source code, vichi
Posle samo uzmes sledeci red i tako dok ne naidjes na eof.
Ovo radi samo ako ti elementi u redu zauzimaju isti broj mesta. Toplo ti preporucujem da ako ovo nije slucaj bolje preuredis txt fajl nego da komplikujes parser jer se lako moze desiti da pogresis; doduse, koriscenjem nekog nekarakteristicnog karaktera za razdvajanje elemenata nece mnogo iskomplikovati parser - tada samo koristis Pos('|', trenutni_red) funkciju da odredis do kog elementa da kopiras/brises trenutni red.
Ako treba source code, vichi
Potpis
Don't try to impress me... I'm good !
Pa ako ti nije problem da okacis!
Code:
var
my_list:TStringList;
i:int;
begin
my_list:=TStringList.Create; // ne secam dali je bas ovako, odavno nisam radio u delphi
my_list.LoadFromFile('c:\moj_delimited_fajl.txt');
for k:=0 to my_list.Count-1 do
begin
//insertuj novi slog u dataset
my_dataset.insert;
//counter za broj kolone pocinje sa nulom
p:=0;
while(Length(my_list[k])>0) do
begin
if(Pos(my_list[k],'|')>0)
begin
// kopiraj slova koja su ispred prvog znaka | i zadatu kolonu dataseta
my_dataset.Params.Params[p].AsString:=Copy(my_list[k],1,Pos(my_list[k],'|')-1);
// postojeci string dobija vrednost istog, bez slova ispred prve instance |
my_list[k]:=Copy(my_list[k],Pos(my_list[k],'|')+1,Length(my_list[k])-Pos(my_list[k],'|')-1) ;
end
else
begin
//kad e radi o zadnjem podatku, onda nemamo | i kopiramo ostatak stringa
my_dataset.Fields.Fields[p].AsString:=my_list[k];
my_list[k]:='';
end;
// predji na sledecu kolonu
inc(p);
end;
my_dataset.post; //postuj podatke u tabelu
end;
end;
var
my_list:TStringList;
i:int;
begin
my_list:=TStringList.Create; // ne secam dali je bas ovako, odavno nisam radio u delphi
my_list.LoadFromFile('c:\moj_delimited_fajl.txt');
for k:=0 to my_list.Count-1 do
begin
//insertuj novi slog u dataset
my_dataset.insert;
//counter za broj kolone pocinje sa nulom
p:=0;
while(Length(my_list[k])>0) do
begin
if(Pos(my_list[k],'|')>0)
begin
// kopiraj slova koja su ispred prvog znaka | i zadatu kolonu dataseta
my_dataset.Params.Params[p].AsString:=Copy(my_list[k],1,Pos(my_list[k],'|')-1);
// postojeci string dobija vrednost istog, bez slova ispred prve instance |
my_list[k]:=Copy(my_list[k],Pos(my_list[k],'|')+1,Length(my_list[k])-Pos(my_list[k],'|')-1) ;
end
else
begin
//kad e radi o zadnjem podatku, onda nemamo | i kopiramo ostatak stringa
my_dataset.Fields.Fields[p].AsString:=my_list[k];
my_list[k]:='';
end;
// predji na sledecu kolonu
inc(p);
end;
my_dataset.post; //postuj podatke u tabelu
end;
end;
Za da ovo radi, moras imati my_dataset, koji ce biti koji bilo objekat nasledjen iz TDataset-a, i imati isti broj kolona, kako sto ima fajl koji parsiras
princip je isti gore navedeni sa nekih malih izmena.
ukoliko ti nesto nije jasno, slobodno pitaj :)
[Ovu poruku je menjao Riste Pejov dana 03.02.2003. u 10:58 GMT]
Potpis
People who think they know everything tend to irritate those of us who do.
Hmm CODE radi ali kada se umesto my_dataset.params stavi my_dataset.Fields[p].asstring i samim tim sve podatke ubacuje u prvo polje???
i mislio sam na Fields, ali eto, iz neobjasnivih razloga (ceo dan sam sam radio na jednom ogromnom IB stored proceduru), sam umesto Fields, stavio Params, izvinite. Koregirano.
Potpis
People who think they know everything tend to irritate those of us who do.