Czytanie z pliku + baza

0

Czesc

Mam pewien plik tekstowy na dysku, w nim dziesiatki wierszy taki jak np. ten ponizej
14882;STOJAK KRATKA MYCOLOR 2 MODULY;;199.00;1;1

Dopiero zaczynam i nie wiem zbytnio jak odczytac z tego pliku kolejno wartosci z kazdego wiersza i zaladowac do bazy danych do odpowiednich kolumn, np.
14882 - Index
STOJAK ... - Nazwa
itd...

Dodatkowym problemem jest to ze zamiast ; (srednika) moze byc , przecinek... Jak to przewidziec ?

0

Witam

Proponuje przeszukac linijke funkcja pos i wyszukac pierwszego srednika i zapisz do bazy.
http://4programmers.net/Forum/260528?h=pos#260528
tu masz linka do podobnego problemu. Wpisz tez w szukaj pos a znajdziesz wiele na ten temat. Jesli beda dalsze problemy pisz.
Pozdrawiam

0

No dobra, pomysl jest niezly, ale wciaz trzymiemy sie kurczowo separatora ; (srednik), nie chce wpisywac na sztywno, jaki bedzie separator, jak to przewidziec, mam nawalic 10 warunkow jesli ; , \t | itd... ???

0

type
  pString =array of packed record
  text:string
end;


function podziel(str:String;znak:string):pstring;
var
s2,s3:string;
p,p2,o,i,z:integer;
items :pstring;
begin
p:=0;
p2:=0;
o:=0;
i:=0;
str:=str+znak;
setlength(items,0);

z:=length(znak);

while i<length(str) do
begin
setlength(items,length(items)+1);
p2:=p2+p;

if p2<>0 then
  o:=z;

s2:=copy(str,p2+o,length(str));
p:=pos(znak,s2);
s3:=copy(s2,0,p-1);

items[length(items)-1].text:=s3;

if p2<>0 then
  p2:=p2+z-1;



i:=i+p2;
end;
result:=items;
end;


end.

tu masz funkcje
przyklad:

ciag:='lol;31;444;432;';
cos:=podziel(ciag,';');

i teraz
cos[1]=31
cos[0]=lol
...

mam nadzieje ze zrozumiale to jest :)

0

Jest prostsza funkcja do ściągnięcia dla Delphi z serwisu: explode.

A jeśli chodzi o sprawdzenie, jaki jest separator, to można to zrobić tak(ale może się okazać, że to nie to jednak).

Jeśli masz np. wybór, że może być albo średnik, albo przecinek, wtedy, jeśli znasz ilość pól w rekordzie, sprawdzasz, ile jest średników w wierszu. Jeśli ilość zgadza się z ilością pól(lub -1, do sprawdzenia), to wtedy separatotem będzie pewnie średnik. To samo możesz zrobić z przecinkiem.

Lamerski sposób, ale nie widzę innego.

0

zrób wcześniej (przed podziałem danej linijki) takie coś

{jeśli może być oddzielony ,}
while (pos(',', linia) <> 0 do
  Linia[pos(',', linia)] := ';';
{jeśli może być oddzielony /}
while (pos('\', linia) <> 0 do
  Linia[pos(',', linia)] := ';';

i tak dla każdego możliwego separatora. W wyniku dostaniesz ciąg, któy ZAWSZE oddzielony jest ; . Delphi jeszcze nie jest inteligętne i nie potrafi sobie samo określić jaki znak jest separatorem i musisz albo zrobić tak jak ja Ci podałęm i potem jeden warunek w pętli dzielącej, albo "nawalić 10 warunków"

1 użytkowników online, w tym zalogowanych: 0, gości: 1