wyszukiwanie w pliku TXT

Odpowiedz Nowy wątek
2004-09-08 17:33
mlody
0

witajcie Panowie i Panie, Panie i Panowie...

dzisiejsze pytanko dotyczy problemu: jak wyszukac w pliku txt linie zaczynajaca sie od znaku "-" i policzyc ile takich linijek wysteuje?
Drugie pytanko chyba analogiczne z tym ze wyszukanie ile razy wystepuje wpisana przez usera data np. "05.08.2004".
Jesli moglbym prosic o kodzik to byloby superasnie, ale cenne beda takze podpowiedzi.

ostatnie pytanie dotyczace mojego poprzedniego... jak wyswietlic z pliku txt szukana date i tekst ktory znajduje sie pod nia ? :(

mam nadzieje ze o zbyt wiele nei prosze :( jesl itak to sorrki!

pozdrowionka

Pozostało 580 znaków

2004-09-08 17:47
0

..acha jeszcze drugie pytanie ;)

hmm wyszukac date, moze byc np. tak:

var
  TF: TextFile;
  dat4: string;
  licznik: integer;
begin
licznik := 0;

AssignFile(TF, 'plik.txt');
Reset(TF);

dat4 := '2004.31.5'    //do zmiennej przypisz date

While not Eof(TF) do
begin
  Readln(TF, linia);

  if Pos(dat4, linia) then goto jest_data;
  licznik := licznik +1;

end;

CloseFile(TF);

showmessage('Znaleziono dat: '+inttostr(licznik));
end;

....prawie to samo co wyzej...ale co tam ;)


"Najwieksze dziela tworza zapalency - jesli cos kochasz to pokaz to"

Pozostało 580 znaków

2004-09-08 17:59
0

używanie instrukcji goto nie jest zalecane od czasów języka basic zatem proponuje przerobić kod na taką postać:

var
  TF: TextFile;
  linia: String;
  i: integer;
begin
i:=0;
AssignFile(TF, 'c:\test.txt'); //tu wpisz ścieżkę do pliku
Reset(TF);

While not Eof(TF) do
begin
  Readln(TF, linia);
  if linia='' then continue;  // jeśli linia pusta to przejdz do następnego przejścia pętli while
  if pos('-',linia[1])=1 then //jeśli pierwszy znak to "-" wtedy...
    begin
      Memo1.Lines.Add(linia);
      Inc(i);
    end;
end;
CloseFile(TF);
Label1.Caption:=IntToStr(i)+' razy';
end;

w label1 pojawi się ile razy wystąpiła linia ze znakiem "-" na początku, a do memo1 wpisuje dany plik. aby ustrzec się błędu umieść jeszcze odpowiednie bloki w try... finally i wszystko bedzie ok.
co do drugiego pytania to zapisuj date w jakiś znacznikach, bo przecież nie będziesz wiedział kto co wpisał do danego pliku i jaką ta data będzie miała formę. Później już tylko Pos+Copy i masz date. :)

Pozostało 580 znaków

2004-09-08 20:48
mlody
0

dzieki Wam bardzo... duzo mi pomogliscie ! chcialbym w niedlugim czasie tez tak moc innym pomagac i z glowy kod pisac :)
a jeszcze jedno... probuje znalezc date analogicznie do poszukiwan znaku "-" w czesci kodu:

 if linia='' then continue;  // jeśli linia pusta to przejdz do następnego przejścia pętli while
  if pos('09/08/2004',linia[1])=1 then //tutaj wisuje date zamiast wczesniejszego '-'
    begin
      src.Lines.Add(linia);
      Inc(i);

ale to nie zdaje rezultatu... co zrobic zeby szukal ciagu kilku znakow (=date) ? i wyswietlil date i tekst ktory znajduje sie pod data ? :(

Pozostało 580 znaków

2004-09-08 20:51
nav
0
 if linia='' then continue; 
  if pos('09/08/2004',linia)>1 then 
    begin
      src.Lines.Add(linia);
      Inc(i);

utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

2004-09-08 20:56
0

pos('09/08/2004',linia)>1

to napewno nie da pożądanego rezultatu:
ShowMessage(IntToStr(Pos('tekst','tekstxxxxx')));


Nadzieja...

Pozostało 580 znaków

2004-09-09 00:05
mlody
0
if linia='' then continue; 
if pos('09/08/2004',linia)>1 then 
begin
src.Lines.Add(linia);
Inc(i);

kolejna pozytywna niespodzianka - wyswietla tekst ale nie bierze pod uwage calego ciagu "09/08/2004" :( widac ze przeszkadzaja mu slashe... probowalem zapisac date w formacie "09.08.2004" ale tez nic nie dalo... :(

btw. poza powyzszym problemem jak zrobic zeby wyswietlilo tresc ktora znajduje sie POD data az do momentu pojawienia sie lini "------------------" ?
oto jak zapisuje dane:
09/08/2004 ; 15:45:34
to jest jakis tam tekst
ciag dalszy tekstu
itd. itd.

09/08/2004 ; 22:23:45
kolejny tekst

wiem ze pomalu naduzywam waszej wyrozumialosci ale spac mi to nie daje :)

Pozostało 580 znaków

2004-09-09 00:16
0

Coz powinienes powiedziec, ze w lini jest nie tylko data ;] Ale problem dalej jest prosty do rozwiazania. Zakladajac ze data bedzie zawsze w formacie xx:xx:xx a nie x:x:x lub innym to mozna zrobic to tak:

var linia : string; // zmienna dla czytanej lini z pliku
     data : string; // zmienna dla odczytanej daty
     plik : text; // pliczek
     i : byte; // licznik
     data_do_szukania : string;  // ta zmienna ustaw sobie gdzies albo daj const :]
     znalezione : byte; // zmienna oznaczajaca ile znaleziono zgadzajacych sie dat

procedure czytanie_lini_ze_sprawdzeniem_czy_jest_ta_data;
begin
linia := ''; // zerujemy sobie
data := ''; // zerujemy sobie
readln(plik, linia); // czytamy linie
for i:=1 to 8 do // wycinamy pierwszych 8 znakow 
     data := data + linia[i]; // czyli tylko nasza date ... zas godzine olewamy
if data = data_do_szukania then inc(znalezione); 
end;                                                               

Na samym koncu jest incrament zmiennej znalezione ale mozesz tam dac co potrzebujesz. Np. procedura do zczytania tekstu zaraz po tej dacie or smth. Najwiecej sie nauczysz probujac dojsc do czegos sam. I pamietaj ze ten kod porownuje jedna linie tekstu ... nic ponad to, a wiec jesli chcesz to wykozystac musisz to dac w repeacie. Najlepiej bedzie jesli przeczytasz to i zrozumiesz po czym napiszesz na podstawie tego wlasny algorytm. Doswiadczenie to w programowaniu bardzo wazna rzecz. Powodzenia :]


SSP - 0.04 - 4% - i c*uj :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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