Gå til innhold

Lesing av tekstfil -> Tabell


Anbefalte innlegg

Heisann!

 

La oss si at jeg har en tekstfil som inneholder tall. Linjevis.

Til nå har jeg latt programmet lese gjennom filen en gang først slik at jeg kan finne ut hvor stor tabell jeg må lage, og så lest inn på nytt og plassert i tabellen. Dette er tungvint! Jeg kunne nok brukt en ArrayList eller noe, men det blir tungvint det også, da tallene må flyttes over i etterkant. Dessuten så blir det brukt exception for å finne slutten på filen, noe som jeg ikke liker.

 

Hvordan kan jeg finne lengden på filen på en enkel måte, slik at innlesing kan foregå i to operasjoner?

-Lage tabell etter filens lengde

-Lese tallene inn i tabellen

Lenke til kommentar
Videoannonse
Annonse
Heisann!

 

La oss si at jeg har en tekstfil som inneholder tall. Linjevis.

Til nå har jeg latt programmet lese gjennom filen en gang først slik at jeg kan finne ut hvor stor tabell jeg må lage, og så lest inn på nytt og plassert i tabellen. Dette er tungvint! Jeg kunne nok brukt en ArrayList eller noe, men det blir tungvint det også, da tallene må flyttes over i etterkant. Dessuten så blir det brukt exception for å finne slutten på filen, noe som jeg ikke liker.

 

Hvordan kan jeg finne lengden på filen på en enkel måte, slik at innlesing kan foregå i to operasjoner?

-Lage tabell etter filens lengde

-Lese tallene inn i tabellen

7862953[/snapback]

 

Det er ingenting i veien for å benytte exceptions slik du beskriver. Det er faktisk en veldig smart måte å utnytte exceptions på. Jeg gjør det selv i andre sammenhenger.

 

Hilsen Werner

Lenke til kommentar

Ok, takk skal du ha!

 

Jeg driver kun programmering på hobbybasis nå, tok noen javafag på universitetet for lenge siden, og en foreleser der likte ikke at jeg gjorde det. Men siden du går god for et skal jeg fotsette med det :)

Lenke til kommentar

Det foreleseren ikke likte var vel antageligvis at du brukte exceptions som en kontrollstruktur.

 

EDIT: sier ikke at det nødvendigvis er et problem i denne sammenhengen, men jeg synes det er litt unødvendig, fordi strengt tatt vet du at du kommer til slutten av filen før eller senere.

 

Det er ikke nødvendig å bruke et exception for å finne enden av filen, du kan for eksempel bruke BufferedReader sin metode readLine() som returnerer null ved eof.

 

Her er et enkelt eksempel for skriving og lesing fra fil. Du finner sikkert mye nyttig om emnet på nettet med relevante søkeord.

 

public static void main(String args[])
{
 try 
 {
 	BufferedWriter bw = new BufferedWriter(new FileWriter("filnavn.txt"));
 	for(int i = 0; i < 3; i++)
 	{
   bw.write("Linje " + Integer.toString(i));
   bw.newLine();
 	}
 	bw.close();
 	
 	BufferedReader br = new BufferedReader(new FileReader("filnavn.txt"));
 	String line;
 	
 	while ((line = br.readLine()) != null)
 	{
   	System.out.println(line);
 	}
 	br.close();
 } catch(FileNotFoundException e)
 { System.out.println("File not found: " + e.getMessage()); }
 catch(IOException e)
 { System.out.println("Error writing / reading file: " + e.getMessage()); }
}

Endret av Ric_H
Lenke til kommentar

Veldig typisk kode for å f.eks lese inn en tabell:

 

BufferedReader br = new BufferedReader(new FileReader("filnavn.txt"));
String columnSeparator = ";{1}";
Vector<String[]> vecRows = new Vector<String[]>();
while(br.ready()) {
  vecRows.add(br.readLine().splitAll(columnSeparator));
}

 

Du ender da opp med en Vector med en String array pr linje.

 

Grunnen til at columnSeparator ikke bare er ;, men ;{1} er at det er en regular expression som blir brukt i splitAll metoden. Denne regular expressionen sier at den skal splitte på hver eneste ;.

 

Det finnes forresten en praktisk metode i Vector, toArray() som gjør at du kan gjøre om en Vector til... ja, du gjettet det, en array :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...