30. marts 2002 - 20:50Der er
12 kommentarer og 1 løsning
segment af en tekst fil
Hej,
Jeg har en stor tekst fil hvorfra jeg ønsker et bestemt segment. Det jeg gør i øjeblikket er at søge filen igennem linie for linie til det som skal bruges bliver fundet. Mit spørgsmål er om ikke det er muligt at udtage tekst fra linie x til x+5 i filen (jeg håber at denne metode er hurtigere).
Sådan overfører du linie 2-3-4 fra memo1 til memo2.
du kan også bare overføre til en streng og søge i den
procedure TForm1.Button1Click(Sender: TObject); var i : integer; startlinie: integer; antallinier: integer; begin memo2.Clear; startlinie := 2; antallinier := 4 ; for i := startlinie-1 to antallinier-1 do memo2.Lines.Add(memo1.Lines[i]); end;
Filen er 300 mb så det kan godt lade sig gøre på din måde. Men jeg ønsker en hurtig metode da det er noget der skal gentages mange gange. Når man bruger append har man en fil pointer som er placeret på for enden af teksten filen. Hvis man nu kunne få den placeret inde midt i filen og der efter begynder at læse.
det er en tekstfil siger du... så er afstanden mellem hver linjeskift jo forskellig. så kan man i princippet ikke vide hvor linje 18.594 er, uden at søge hele filen igennem til man når det punkt.
Læs hele filen igennem en gang, og led efter /n (linieskift). Hver gang du finde et /n, så gemmer du fil-positionen i en struktur. Når du har læst hele filen igennem, så har du i pricippet lavet en slagt index-fil den oprindlige fil. Nu kan du bruge seek funktionen til at læse x+5 linier i filen.
Hvis du skal indexerer dig i en sådan fil, så ville jeg nok vælge alle andre løsninger end at loade den i en TStringList eller lignende.. Vi taler 300MB og du vil få et swap helvede...
Ideen med at gennemlæse filen og finde pointere til alle linierne er bedre, men du ender stadig op med en array på cirka 4000000 items, hvis vi antager at du har en gennemsnitlig linielængde på 80...
Hvis du ikke vil smide det over i en database og udnytte at sådan noget er en db nu en gang god til, så kunne man danne en ny fil med en fast linie længde - som du så kan indexere i. Men det kommer igen an på hvilke slags data, der ligger i filen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.