Avatar billede grave Nybegynder
27. august 2002 - 16:36 Der 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
Avatar billede danielks Nybegynder
27. august 2002 - 16:41 #1
brug "IF" sætninger, det er det eneste jeg kan finde på...
Avatar billede grave Nybegynder
27. august 2002 - 16:43 #2
if sætninger ??????????
Avatar billede jakoba Nybegynder
27. august 2002 - 17:30 #3
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'.

mvh JakobA
Avatar billede disky Nybegynder
27. august 2002 - 18:37 #4
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.
Avatar billede carstenknudsen Nybegynder
27. august 2002 - 19:26 #5
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.
Avatar billede longshanks Nybegynder
29. august 2002 - 10:18 #6
Dim variabel
variabel = right("100 linier tekst her.....", 100)

tallet 100 betyder at der tages 100 tegn fra højre(altså fra enden af tekststrengen). Det skulle virke..
Avatar billede disky Nybegynder
29. august 2002 - 11:17 #7
longshanks:
Det her er en java gruppe, ikke VB eller en anden basic clone :)

p.s. din ide kræver MEGET ram, hvis textfilen er på 100 MByte.
Avatar billede cybermazedk Nybegynder
03. oktober 2002 - 17:45 #8
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.
Avatar billede grave Nybegynder
15. januar 2003 - 11:17 #9
Brugte disky's ringbuffer. kan ikke lige huske hvordan det blev løst men løst blev det :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester