27. august 2002 - 16:36Der er
8 kommentarer og 1 løsning
læse text fil bagfra
Hvordan kan jeg indlæse en textfil ind i en ArrayList Bagfra.
Problemet er at jeg har en MEGET stor textfil jeg kun skal indlæse de sidste 100 linier ind af og have dem gemt i en ArrayList, så jeg har ikke lyst til at loade hele filen ind i memory'en for at vende den om
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Det er der ikke rigtig noget at gøre ved. filer er mere eller mindre beregnet til at blive læst fra forenden til bagenden.
hvis det er noget du skal gøre ofte kunne det nok være en ide at lægge de sidste 100 linier ud som en separat fil som så er nemmere at håndtere. Du skal så sørge for at synkronisere sådan af fx nye linier der tilføjes bliver skrevet til begge filer. På en stor fil kan du faktisk spar MEGET tid med den slags tricks.
Eller du kan lagre de mange linier i en database hvor du så bare kan sige 'giv mig de 100 bagerste'.
Hvis du vil gøre det fra en fil, lav en ringbuffer med 100 liniers plads, smid linierne en efter en ind i den buffer, når du smider en ny linie ind skal du bare overskrive den ældste osv.
Når du er igennem filen, er de nederste 100 linier i din buffer.
Du benytte RandomAccessFile klassen. Der kan du så bogstaveligt talt læse filen bagfra og holde øje med linieskift og dermed læse præcis de sidste 100 linier.
Det er sgi svært at svare på, når vi ikke har så meget at gå efter.
Meeeen. Hvis du f.eks. ved at de sidste 100 linier kommer efter f.eks. 800 linier, kan du bare lave en simpel lykke der læser fra filen 800 gange og intet gør med det indlæste:
for( int i = 0; i < 800; i++ ) { input.readLine(); }
input er her en BufferedReader, som kan indlæse hele linier fra filen.
Dernæst kan du så hente og gemme de 100 linier.
Hvis du ikke ved hvad linie nummer det er, dur dette ikke. Men hvis linierne har samme længde (f.eks. 80 tegn) kan du ud fra filens størrelse regne dig frem til linienummeret.
Er linierne af forskellig længde, og er der et forskelligt antal linier er det langt værre. I så fald lyder Diskys metode fornuftig.
Brugte disky's ringbuffer. kan ikke lige huske hvordan det blev løst men løst blev det :)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.