/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
finde i en fil?
Fra : Rasmus Trenskow


Dato : 20-12-02 02:27

Hejsa Allesammen, jeg har et lille spøgsmål.
Jeg har arbejdet lidt med at hente og gemme data fra en txt fil, med
filereader og filewriter, samt brugt tokenizer.

Det jeg gerne vil vide lidt om nu er, at hvis jeg feks har en fil med noget
tekst

[BlaBla]
BlaBla
Bla
BlaBlaBla
Bla
Bla BlaBla Bla Bla BlaBla Bla

[Bla Bla3]
Bla Bla osv
hvordan finder jeg så feks teksten der er markeret med[ ], og læser videre
derfra til næste [ ].
Håber mit spørgsmål kan forståes, ellers må jeg prøve at komme med et
eksempel.

Rasmus



 
 
Jonas Kongslund (20-12-2002)
Kommentar
Fra : Jonas Kongslund


Dato : 20-12-02 04:18

Rasmus Trenskow wrote:

> Hejsa Allesammen, jeg har et lille spøgsmål.
> Jeg har arbejdet lidt med at hente og gemme data fra en txt fil, med
> filereader og filewriter, samt brugt tokenizer.
>
> Det jeg gerne vil vide lidt om nu er, at hvis jeg feks har en fil med
> noget tekst
>
> [BlaBla]
> BlaBla
> Bla
> BlaBlaBla
> Bla
> Bla BlaBla Bla Bla BlaBla Bla
>
> [Bla Bla3]
> Bla Bla osv
> hvordan finder jeg så feks teksten der er markeret med[ ], og læser videre
> derfra til næste [ ].
> Håber mit spørgsmål kan forståes, ellers må jeg prøve at komme med et
> eksempel.
>
> Rasmus

Lad mig gætte på at du er i gang med at opfinde et ini-filformat i stil med
det der anvendes af Windows?

Brug en java.io.BufferedReader til at læse én linje af gangen. Lav noget i
stil med nedenstående

BufferedReader in = ...;
String s = null;
while ((s = in.readLine()) != null && !s.equals("[foo]"));
if (s == null) {
// ikke fundet
} else { // s = "[foo]"
while ((s = in.readLine()) != null && !s.startsWith("[")) {
// Gør et eller andet med s
}
if (s == null) {
// end of file
} else { // s = [bar] hvor bar er næste []-blok
...
}
}

I stedet for at lave ovenstående hver eneste gang du ønsker at læse
indholdet hørende til en given []-blok så kan det - alt afhængigt af
brugskonteksten - være en fordel en gang for alle at indlæse hele filen og
repræsentere den i en dertil indrettet datastruktur.

--
Jonas Kongslund <jonas(at)kongslund.dk> http://www.kongslund.dk/
The programmer, like the poet, works only slightly removed from pure
thought-stuff. He builds his castles in the air, from air, creating by
exertion of the imagination. [Brooks, The Mythical Man-Month]

Jesper Sørensen (20-12-2002)
Kommentar
Fra : Jesper Sørensen


Dato : 20-12-02 06:00

> Lad mig gætte på at du er i gang med at opfinde et ini-filformat i stil
med
> det der anvendes af Windows?
I så fald har Java indbygget understøttelse for dette via
java.util.PropertyResourceBundle

mvh
JS




Jonas Kongslund (20-12-2002)
Kommentar
Fra : Jonas Kongslund


Dato : 20-12-02 06:07

Jesper Sørensen wrote:

>> Lad mig gætte på at du er i gang med at opfinde et ini-filformat i stil
> med
>> det der anvendes af Windows?
> I så fald har Java indbygget understøttelse for dette via
> java.util.PropertyResourceBundle

PropertyResourceBundle har ikke understøttelse for []-blokke, men er
derudover nok at foretrække i de fleste situationer.

Som en anden ting kunne man benytte sig af java.util.props.* i JDK1.4, hvor
data er repræsenteret som en træstruktur.

--
Jonas Kongslund <jonas(at)kongslund.dk> http://www.kongslund.dk/
The programmer, like the poet, works only slightly removed from pure
thought-stuff. He builds his castles in the air, from air, creating by
exertion of the imagination. [Brooks, The Mythical Man-Month]

Rasmus Trenskow (20-12-2002)
Kommentar
Fra : Rasmus Trenskow


Dato : 20-12-02 23:51

>
> Brug en java.io.BufferedReader til at læse én linje af gangen. Lav noget i
> stil med nedenstående
>
> BufferedReader in = ...;
> String s = null;
> while ((s = in.readLine()) != null && !s.equals("[foo]"));
> if (s == null) {
> // ikke fundet
> } else { // s = "[foo]"
> while ((s = in.readLine()) != null && !s.startsWith("[")) {
> // Gør et eller andet med s
> }
> if (s == null) {
> // end of file
> } else { // s = [bar] hvor bar er næste []-blok
> ...
> }
> }
>
Hejsa... det er nogenlunde ligesom ini filerne i windows... det jeg skal det
er den skal springe nogen faste [] over, som har det samme i linierne hver
gang, men det der skal bruges, er [] med forskelligt indhold fra gang til
gang filen skal læses. der kan være alt fra 15 til 20 af dem...
Kan det laves så jeg får den til at springe alle dem over som jeg kender
navnet på, og så tager resten
de kan jo hedde [a], [b],[c],[d] osv. Kan jeg bruge asterisk til det,
ligesom hvis det matcher [*] undtagen, a, b, c, d,?
Rasmus



Jonas Kongslund (21-12-2002)
Kommentar
Fra : Jonas Kongslund


Dato : 21-12-02 01:40

Rasmus Trenskow wrote:

>>
>> Brug en java.io.BufferedReader til at læse én linje af gangen. Lav noget
>> i stil med nedenstående
>>
>> BufferedReader in = ...;
>> String s = null;
>> while ((s = in.readLine()) != null && !s.equals("[foo]"));
>> if (s == null) {
>> // ikke fundet
>> } else { // s = "[foo]"
>> while ((s = in.readLine()) != null && !s.startsWith("[")) {
>> // Gør et eller andet med s
>> }
>> if (s == null) {
>> // end of file
>> } else { // s = [bar] hvor bar er næste []-blok
>> ...
>> }
>> }
>>
> Hejsa... det er nogenlunde ligesom ini filerne i windows... det jeg skal
> det er den skal springe nogen faste [] over, som har det samme i linierne
> hver gang, men det der skal bruges, er [] med forskelligt indhold fra gang
> til gang filen skal læses. der kan være alt fra 15 til 20 af dem...
> Kan det laves så jeg får den til at springe alle dem over som jeg kender
> navnet på, og så tager resten
> de kan jo hedde [a], [b],[c],[d] osv.

Det er jo bare at lave strengsammenligning mens du sekventielt gennemløber
filen. Hvis en given []-blok hører til en af dem du kender navnet på så
spoler du bare videre til den næste []-blok.

> Kan jeg bruge asterisk til det,
> ligesom hvis det matcher [*] undtagen, a, b, c, d,?
> Rasmus

Regulære udtryk er IMHO overkill i denne sammenhæng, men det kan godt lade
sig gøre med java.util.regex.*

--
Jonas Kongslund <jonas(at)kongslund.dk> http://www.kongslund.dk/
The programmer, like the poet, works only slightly removed from pure
thought-stuff. He builds his castles in the air, from air, creating by
exertion of the imagination. [Brooks, The Mythical Man-Month]

Søg
Reklame
Statistik
Spørgsmål : 177492
Tips : 31966
Nyheder : 719565
Indlæg : 6408466
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste