zapis i odczyt do pliku

0

dzien dobry
wiem ze tematow poswieconych zapisowi i odczytowi jest juz tu duzo ale niestety nie znalazlem w nich interesujacych mnie rzeczy,mozliwe ze byla o nich tu mowa i mozliwe tez ze wszytsko wytlumaczone jest w helpie ale jednak nie znalazlem

jestem w trakcie pracy nad slownikiem i utknalem przy dwoch problemach

pierwszym z nich jest odczyt odpowiedniego hasla
plik tekstowy o budowie "haslo;definicja" jest wczytywany do listview na ktorym przeprowadzane jest wyszukiwanie,po kliknieciu na wyszukane haslo otwiera sie nowe okno,powinno sie w nim znalezc nazwa hasla ktore zostalo klikniete oraz odpowiednia dla niego definicja,i wlasnie z tym nie potrafie sobie poradzic

drugim problemem jest zapis do pliku

w tym momecie wyglada to nastepujaco:

AssignFile(TF, 'plik.txt');
Reset(TF);
Append(TF);
Writeln(TF, edit3.Text + ';' + edit4.Text);
CloseFile(TF);

ale chcialbym aby przed zapisem sprawdzane bylo czy wartosc z edit3 (czyli haslo) nie wystepuje juz w pliku a jesli wystepuje to zeby pojawial sie komunikat powiadamiajacy o tym

0

Nie polecam wczytywania do pamięci całego słownika. Dopóki masz powiedzmy 20 haseł, to chodzi Ci gładko. Ale jak zrobisz z tego małą encyklopedię, to zapcha połowę pamięci każdemu kompowi, albo w ogóle się nie uruchomi. Zwróć uwagę na fakt, że słownik zawierający tylko wyrazy (bez żadnych wyjaśnień ani nic takiego) nie dłuższe niż 15 liter występujące w języku polskim i nie będące nazwami własnymi zajmuje ponad 30 MB. Zastanów się ile zajmie Ci cała baza danych takiego słownika. Osobiście polecałbym skorzystanie z jakiejś bazy danych, która zrobi to szybko i bezboleśnie. No i od razu rozwiążesz drugi problem. Do tego dojdzie Ci dużo szybsze i wygodniejsze sortowanie i wyszukiwanie.

0

oczywisice zdaje sobie sprawe ze baza danych bylaby lepszym rozwiazaniem ale jednym z wymogow tej aplikacji bylo wlasnie to ze musi dzialac na prostym pliku tekstowym

liczba hasel rowniez nie bedzie duzo wiec na razie zostawie wczytywanie

ale bylbym wdzieczny za jakies wskazowki dotyczace wymienionych wczesniej problemow

0

Skoro jednym z wymogów tej aplikacji jest to, że słownik musi być w pliku tekstowym, to niestety, zarówno wyszukiwanie hasła, jak i sprawdzanie, czy takiego już wcześniej nie było, będzie opierać się na pętli for oraz sprawdzaniu każdej linijki.

0

na razie probuje zrobic cos w jakis podobny sposob do tego

for I := 0 to listview1.Items.Count -1 do
begin
Found := Pos(edit3.Text, listview1.Items[i].Caption);
if (Found > 0) and (listview1.Items[i].Caption[1] = edit3.Text[1]) then
begin
Form6.Show; //komunikat ze haslo istnieje
end
else
AssignFile(TF, 'plik.txt');
Reset(TF);
Append(TF);
Writeln(TF, edit3.Text + ';' + edit4.Text);
CloseFile(TF);
Break;
end;

ale w tej chwili aplikacja dodaje kazde haslo,takze te istniejace

0
berl napisał(a)

Skoro jednym z wymogów tej aplikacji jest to, że słownik musi być w pliku tekstowym, to niestety, zarówno wyszukiwanie hasła, jak i sprawdzanie, czy takiego już wcześniej nie było, będzie opierać się na pętli for oraz sprawdzaniu każdej linijki.

CZYLI:

while not eof(plik) then
begin
readln(plik, str1);
if str1:=edit1.text then brake  //ewentualnie jakieś komunikaty
else znaleziono:=false; //boolean wynikowy :)
end;

Dalej to chyba sobie poradzisz, nie?

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