N-FoeMedlem sedan juni 200384 inlägg Hur läser man in värden som är sparade i en fil?
Värdena består utav int:s.
Kan man läsa in ints direkt med nån metod? Eller kan man läsa in varje char med tex FileInputStream och sen omvandla till int?
I vilket fall som helst måste man väl ha nåt slags stopp-tecken mellan talen? Kan man lösa det genom att varje tal står på en rad och så att man läser in hela raden vid varje inläsning. Då slipper man en massa stopp-tecken.
ViktorMedlem sedan aug. 20021 752 inlägg Är det en text fil eller en binär fil? Om det är en binär fil så är ju alla ints 4 byte, då behövs inget stop tecken mellan varje. Du använder då en DataInputStream för att läsa från filen
DataInputStrea dis=new DataInputStream(new FileInputStream("kalle.dat"));
int tal1=dis.readInt();
int tal2=dis.readInt();
dis.close();
Om det är en text fil så kan det bli mycket svårare, men då är funktionen Integer.parseInt bra att använda för att konvertera en text sträng till en int.
/Viktor
N-FoeMedlem sedan juni 200384 inlägg Dessvärre är det en text-fil...
pettssonMedlem sedan jan. 20021 122 inlägg Vet du hur långa dessa intar är? Om de alla alltid är lika långa borde du ju kunna läsa in det antalet tecken och, som Viktor sa, parseInt:a dom och spara undan på rätt plats
PeWMedlem sedan juni 200010 432 inlägg Är det en textfil är allt som står där strängar och ska behandlas som strängar. Det betyder att varje ord (int i det här fallet) även har ett \0 - tecken.. dvs det stopptecken du skrev om. Så det är bara att läsa in ett ord i taget och konvertera om det ordet till en Integer (det som man får när man parsar genom metoden parseInt, vilket egentligen inte är en äkta int i bemärkelsen primitiven int).
spangoMedlem sedan juni 20008 205 inlägg PeW, nu talar du fel språk ;)
Java använder inga \0-tecken, du får göra något i stil med det här:
BufferedReader in = ...;
String line;
while ((line = in.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line); // antar att talen är åtskilda av whitespace
while (st.hasMoreTokens()) doSomething(Integer.parseInt(st.nextToken()))
}
N-FoeMedlem sedan juni 200384 inlägg Hur får jag BufferedReader instansen att läsa från filen?
N-FoeMedlem sedan juni 200384 inlägg sant.. fattar nu! sorry ;)
PeWMedlem sedan juni 200010 432 inlägg
spango skrev:
PeW, nu talar du fel språk ;)
Java använder inga \0-tecken
Ok, det var ett tag sedan jag proggade i Java och Haskellkursen genererade ett antal overflows i minnet :p
Men hur markeras strängslut i java då, enligt dig? Hur tar jvm reda på längden av en sträng (sätter size) om den inte har en terminering av strängen? Såvitt jag sett så anger man inte saker som "kalle"5 eller "kalle<slut>" ;) :p
Ok, det är skillnad på primitiva chararrays och Strings i både Java och C++, då det senare är ett objekt och det första en primitiv, men i botten är även värdet av Strings ett antal sammansatta byten i minnet (primitiv chararray).
Om det inte fanns en terminering av strängarna skulle en åtskillnad av ord mha whitespace oåterkalleligt ge att ord som "Junk food" ge uppdelning av orden till "Junk" och "Food", eller hur? ;)
spangoMedlem sedan juni 20008 205 inlägg
PeW skrev:
Men hur markeras strängslut i java då, enligt dig? Hur tar jvm reda på längden av en sträng (sätter size) om den inte har en terminering av strängen? Såvitt jag sett så anger man inte saker som "kalle"5 eller "kalle<slut>" ;) :p
Strängar lagras internt i java.lang.String som char[], och arrayers längd hållre man koll på med medlemsvariabeln length :p
Om du inte tror mig kan du ju ta och kika i src.zip som följer med JDK:n.
PeW skrev:
Om det inte fanns en terminering av strängarna skulle en åtskillnad av ord mha whitespace oåterkalleligt ge att ord som "Junk food" ge uppdelning av orden till "Junk" och "Food", eller hur? ;)
Mmm, men när man bara trixar med siffror (som i exemplet ovan) funkar whitespace himla bra som separator...
PeWMedlem sedan juni 200010 432 inlägg
Strängar lagras internt i java.lang.String som char[], och arrayers längd hållre man koll på med medlemsvariabeln length
Om du inte tror mig kan du ju ta och kika i src.zip som följer med JDK:n.
Jag skrev ju samma sak så varför skulle jag inte tro dig? ;) Visst håller man koll på längen av strängen genom lenght (inte size som jag skrev), men det värdet kommer sig ju av att man nånstans räknat fram antalet tecken till terminering av strängen, eller hur?
Jaja, skitsamma... inget att tjafsa om, nu ska jag slänga ihop en lexicalanalysator och rekursiv prediktiv parser - i C :p :)
PeW skrev:
[...] konvertera om det ordet till en Integer (det som man får när man parsar genom metoden parseInt, vilket egentligen inte är en äkta int i bemärkelsen primitiven int).
Integer.parseInt returnerar ingenting annat än int.
PeW skrev:
Jaja, skitsamma... inget att tjafsa om, nu ska jag slänga ihop en lexicalanalysator och rekursiv prediktiv parser - i C
Oooh vad du är duktig.:OO
PeWMedlem sedan juni 200010 432 inlägg
Sang-drax skrev:
Integer.parseInt returnerar ingenting annat än int.
Japp, det var fel av mig. Har inget att "skylla på" och tänker inte ens försöka.
Sang-Drax skrev:
Oooh vad du är duktig.:OO
Säger du det? Jag vet inte vad du har för ambitioner när du skriver inlägg, det kanske är att vara duktig, vad vet jag? Det jag ivf gjorde var att ironisera över situationen genom att tillstå att språket C är roligare, men du kanske inte fattade det?