Odczytywanie od konkretnej linii z pliku tekstowego

0

Witam.
Istnieją jakieś funkcje w delphi które przenosiłyby kursor na konkretną linie w pliku tekstowym?
Potrzebne mi jest to ponieważ odczytuje dane z pliku do którego ciągle są dopisywane dane, za pierwszym razem nie ma problemu i odczytuje od początku do końca,zapisuje do zmiennej ile linii zostało przeczytanych, ale następnie chcę odczytać tylko od linii zapisanej w zmiennej. Ma ktoś jakiś pomysł jak to napisać?
Pozdrawiam.

0

TStringList

0

ale to chyba wymaga wczytania całego pliku do stringlisty... a ja chce w pętli

 
var s:string;
f:textfile;
[...]
while not eof(f)
begin
//tu chce rozpocząć wczytywanie od konkretnej linii
readln(f,s);
rob_cos_dalej_z_tekstem(s);

[...]
end;
0

myślę że sprawę rozwiązały by funkcje tellg i seekg z c++ działające z na obiekcie TextFile...

0

ale to delphi, a nie c++.

@s-i: musisz policzyć, ile linijek ma plik albo wczytując go linijka po linijce, albo wczytując kawałkami do bufora i zliczając zawarte w nim znaki nowej linii, albo załadować cały plik do pamięci i zliczyć te znaki (możesz pójść nieco na skróty i użyć TStringList polecone przez Patryka).

0

Z tym sobie już poradziłem ale mam inny problem. Otóż, do pliku który otwieram ciągle są zapisywane dane przez grę, więc jeśli gra jest uruchomiona nie mogę dostać się do pliku (i/o error 32). A program z założenia ma być uruchomiony razem z grą. Jest jakiś sposób żeby to obejść? Ten błąd oznacza że plik już jest używany przez inny program?

0

google! albo help dołączony do delphi, który to nie jest tylko po to, żeby zwiększyć rozmiar instalki. help jak sama nazwa wskazuje służy do POMOCY i zawiera odpowiedzi na 90% zadawanych tu pytań, między innymi na twoje o ioerror 32.
jeśli gra otwiera plik w trybie wyłączności, to nie dostaniesz się do niego bez zaawansowanych tricków (albo przez bezpośredni odczyt z partycji, albo przez znalezienie w pamięci procesu gry uchwytu do otwartego pliku).

0

Plik chyba nie jest otwierany na wyłączność, bo np. notatnikiem mogę go otworzyć, alert wyświetla się dopiero gdy zmienię plik i próbuje go zapisać. W moim programie nie potrzebuje zapisywać pliku tylko go otworzyć. Otwieram go tylko do odczytu za pomocą reset();

0
assignfile(f,edit1.text);
FileMode:=fmOpenRead;
reset(f);
 

Nadal io error 32.

0

a zwróciłeś uwagę, że pod podanym linkiem są jeszcze inne flagi? podpowiem, bo już kończy mi się cierpliwość: co znaczy share? co znaczy deny? masz cztery/pięć możliwości, spróbuj ruszyć głową i trafić za pierwszym razem.

0

A jak ci powiem że próbowałem wszystkie flagi?

0
fileMode := fmOpenRead or fmShareDenyNone;

i natychmiast po odczytaniu zawartości closeFile()?

0

Szukałem, i też znalazłem te flagi połączone ale wraz to samo.

var s: string;

assignfile(f,edit1.text);
fileMode := fmOpenRead or fmShareDenyNone;
reset(f);
readln(f,s);
closefile(f); 

Nie działa nawet jak nic nie robię z plikiem (bez readln(f,s))

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