/ 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
regexp
Fra : Thomas D Ahle


Dato : 27-02-05 20:47

Hej, jeg er ved at lave et program, der bruger en config fil. Til det skal
jeg bruge nogle regulære udtryk. Lige nu har jeg siddet i 2 timer og
fumlet med et, der skal fange f.eks. "[ ksdjf]". Jeg kan lave en
String.split med "\[[ \t]*(\w+)[ \t]*\]", men hvis det skal passe ind i
Pattern p = Pattern.compile("???", Pattern.DOTALL);
Matcher m = p.matcher(data); boolean b = m.matches();
System.out.println(m.groupCount());
Kræver det at udtrykket matcher hele strengen, som f.eks. kan se ud
som:
#Start på fil
[enhed]
"punkt" = "Y"
[enhed]
"punkt" = "N"
"punkt2" = "Y"
#Slut på fil

Jeg har prøvet mange ting, men jeg er ikke så skræp til de der udtryk.
Er der nogen, der kan komme på et, som vil kunne klare opgaven?

 
 
Kristian Thy (28-02-2005)
Kommentar
Fra : Kristian Thy


Dato : 28-02-05 00:20

Thomas D Ahle wrote:
> Er der nogen, der kan komme på et, som vil kunne klare opgaven?

Er der nogen speciel grund til at du ikke bruger Javas indbyggede
java.util.Properties klasse til at læse property-filer?

\\kristian
--
Thomas Madsens fremragende guide til sikring af Windows:
http://home18.inet.tele.dk/madsen/windows/tjenester/

Thomas D Ahle (28-02-2005)
Kommentar
Fra : Thomas D Ahle


Dato : 28-02-05 12:15

Smart, det lykkedes at indlæse en fil som:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="TWO">2</entry>
<entry key="FOUR">4</entry>
<entry key="ONE">1</entry>
<entry key="THREE">3</entry>
</properties>

med

Properties p = new Properties();
FileInputStream indFil = new FileInputStream("../bolde/config2.xml");
p.loadFromXML(indFil);
p.list(System.out);

men hvordan indlæser jeg en fil som:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<gruppe>
<entry key="TWO">2</entry>
<entry key="FOUR">4</entry>
</grupper>
<gruppe>
<entry key="ONE">1</entry>
<entry key="THREE">3</entry>
</grupper>
</properties>

Hilsen Thomas

Mon, 28 Feb 2005 00:19:46 +0100. skrev Kristian Thy:
> Thomas D Ahle wrote:
>> Er der nogen, der kan komme på et, som vil kunne klare opgaven?
>
> Er der nogen speciel grund til at du ikke bruger Javas indbyggede
> java.util.Properties klasse til at læse property-filer?
>
> \\kristian


Malte (28-02-2005)
Kommentar
Fra : Malte


Dato : 28-02-05 16:01

Thomas D Ahle wrote:
> Smart, det lykkedes at indlæse en fil som:
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
> <properties>
> <entry key="TWO">2</entry>
> <entry key="FOUR">4</entry>
> <entry key="ONE">1</entry>
> <entry key="THREE">3</entry>
> </properties>
>
> med
>
> Properties p = new Properties();
> FileInputStream indFil = new FileInputStream("../bolde/config2.xml");
> p.loadFromXML(indFil);
> p.list(System.out);
>
> men hvordan indlæser jeg en fil som:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
> <properties>
> <gruppe>
> <entry key="TWO">2</entry>
> <entry key="FOUR">4</entry>
> </grupper>
> <gruppe>
> <entry key="ONE">1</entry>
> <entry key="THREE">3</entry>
> </grupper>
> </properties>
>
> Hilsen Thomas
>
> Mon, 28 Feb 2005 00:19:46 +0100. skrev Kristian Thy:
>
>>Thomas D Ahle wrote:
>>
>>>Er der nogen, der kan komme på et, som vil kunne klare opgaven?
>>
>>Er der nogen speciel grund til at du ikke bruger Javas indbyggede
>>java.util.Properties klasse til at læse property-filer?
>>
>>\\kristian
>
>
Den er da vist ikke well-formed?

Thomas D Ahle (28-02-2005)
Kommentar
Fra : Thomas D Ahle


Dato : 28-02-05 15:59

Mon, 28 Feb 2005 16:00:37 +0100. skrev Malte:
>> <?xml version="1.0" encoding="UTF-8"?>
>> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
>> <properties>
>> <gruppe>
>> <entry key="TWO">2</entry>
>> <entry key="FOUR">4</entry>
>> </grupper>
>> <gruppe>
>> <entry key="ONE">1</entry>
>> <entry key="THREE">3</entry>
>> </grupper>
>> </properties>

> Den er da vist ikke well-formed?

Det er lige det, der er problemet. Hvor lærer jeg at lave en well formed
java xml ting? Burde man kunne læse det i:
http://java.sun.com/dtd/properties.dtd ? Og hvordan?

Malte (28-02-2005)
Kommentar
Fra : Malte


Dato : 28-02-05 16:17

Thomas D Ahle wrote:
> Mon, 28 Feb 2005 16:00:37 +0100. skrev Malte:
>
>>><?xml version="1.0" encoding="UTF-8"?>
>>><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
>>><properties>
>>> <gruppe>
>>> <entry key="TWO">2</entry>
>>> <entry key="FOUR">4</entry>
>>> </grupper>
>>> <gruppe>
>>> <entry key="ONE">1</entry>
>>> <entry key="THREE">3</entry>
>>> </grupper>
>>></properties>
>
>
>>Den er da vist ikke well-formed?
>
>
> Det er lige det, der er problemet. Hvor lærer jeg at lave en well formed
> java xml ting? Burde man kunne læse det i:
> http://java.sun.com/dtd/properties.dtd ? Og hvordan?

Denne burde være well formed (har ikke testet den i OxygenXML)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
   <grupper>
<gruppe>
<entry key="TWO">2</entry>
<entry key="FOUR">4</entry>
</gruppe>
<gruppe>
<entry key="ONE">1</entry>
<entry key="THREE">3</entry>
</gruppe>
</grupper>
</properties>

Du bør også kunne udelade <grupper></grupper>, men du kan ikke have
<grupper> nested i <gruppe>

Thomas D Ahle (28-02-2005)
Kommentar
Fra : Thomas D Ahle


Dato : 28-02-05 16:37

Mon, 28 Feb 2005 16:16:37 +0100. skrev Malte:

> Thomas D Ahle wrote:
>> Mon, 28 Feb 2005 16:00:37 +0100. skrev Malte:
>>
>>>><?xml version="1.0" encoding="UTF-8"?>
>>>><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
>>>><properties>
>>>> <gruppe>
>>>> <entry key="TWO">2</entry>
>>>> <entry key="FOUR">4</entry>
>>>> </grupper>
>>>> <gruppe>
>>>> <entry key="ONE">1</entry>
>>>> <entry key="THREE">3</entry>
>>>> </grupper>
>>>></properties>
>>
>>
>>>Den er da vist ikke well-formed?
>>
>>
>> Det er lige det, der er problemet. Hvor lærer jeg at lave en well formed
>> java xml ting? Burde man kunne læse det i:
>> http://java.sun.com/dtd/properties.dtd ? Og hvordan?
>
> Denne burde være well formed (har ikke testet den i OxygenXML)
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
> <properties>
>    <grupper>
> <gruppe>
> <entry key="TWO">2</entry>
> <entry key="FOUR">4</entry>
> </gruppe>
> <gruppe>
> <entry key="ONE">1</entry>
> <entry key="THREE">3</entry>
> </gruppe>
> </grupper>
> </properties>
>
> Du bør også kunne udelade <grupper></grupper>, men du kan ikke have
> <grupper> nested i <gruppe>

Det med <grupper> var vist en fejl, men hvis jeg retter det og skriver:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<gruppe>
<entry key="TWO">2</entry>
<entry key="FOUR">4</entry>
</gruppe>
<gruppe>
<entry key="ONE">1</entry>
<entry key="THREE">3</entry>
</gruppe>
</properties>

får jeg stadig beskeden: Læsefejl:
java.util.InvalidPropertiesFormatException: org.xml.sax.SAXParseException:
Element type "gruppe" must be declared.

Malte (28-02-2005)
Kommentar
Fra : Malte


Dato : 28-02-05 17:19

Thomas D Ahle wrote:

> Det med <grupper> var vist en fejl, men hvis jeg retter det og skriver:
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
> <properties>
> <gruppe>
> <entry key="TWO">2</entry>
> <entry key="FOUR">4</entry>
> </gruppe>
> <gruppe>
> <entry key="ONE">1</entry>
> <entry key="THREE">3</entry>
> </gruppe>
> </properties>
>
> får jeg stadig beskeden: Læsefejl:
> java.util.InvalidPropertiesFormatException: org.xml.sax.SAXParseException:
> Element type "gruppe" must be declared.

Hmm, jeg har ikke netop adgang til en 1.5, men doctype'n synes at
fordre, at din struktur ser således ud:

<properties>
<entry key="fornavn">John</entry>
<entry key="efternavn">Doe</entry>
</properties>

Jeg er ærlig talt ikke klar over, om din xml fil må være mere
kompliceret end som så.

Evtl. vil jeg anbefale, at du instantierer et Properties objekt som du
så lægger ud som xsl v.h.a. storeToXML() metoden, som jeg kan se i
JavaDoc på Sun's site findes. Så kan du se, hvad den foretager sig.

I øvrigt har jeg forsøgt at generere en XML, som bruger properties
doctype'n, og mit værktøj brokker sig over Sun's <?xml version='"1.0"...
linie i DTD'en.

På den anden side: hvis din XML ikke må være mere kompliceret end som
ovenfor, så er der næppe noget vundet ved at anvende xml. Et Properties
er jo blot en slags hashtable med key/value, så en mere kompliceret
struktur i xml filen giver vel næppe nogen mening?

Thomas D Ahle (28-02-2005)
Kommentar
Fra : Thomas D Ahle


Dato : 28-02-05 18:37

Mon, 28 Feb 2005 17:18:40 +0100. skrev Malte:
> På den anden side: hvis din XML ikke må være mere kompliceret end som
> ovenfor, så er der næppe noget vundet ved at anvende xml. Et Properties
> er jo blot en slags hashtable med key/value, så en mere kompliceret
> struktur i xml filen giver vel næppe nogen mening?

Mit problem er jo, at jeg har et ping-pong spil, som jeg gerne vil have at
brugeren kan ændre via en config fil. Min originale fil så ud som:
#Start på fil
[flade]
"baggrund" = "20,20,20"
[enhed]
"punkt" = "Y"
[enhed]
"punkt" = "N"
"punkt2" = "Y"
#Slut på fil
Du har nok ret i, at man ikke kan bruge en Properties, men hvad skal man
så gøre? Min originale idé var jo noget med noget regexp...

Malte (28-02-2005)
Kommentar
Fra : Malte


Dato : 28-02-05 20:45

Thomas D Ahle wrote:
> Mon, 28 Feb 2005 17:18:40 +0100. skrev Malte:
>
>>På den anden side: hvis din XML ikke må være mere kompliceret end som
>>ovenfor, så er der næppe noget vundet ved at anvende xml. Et Properties
>>er jo blot en slags hashtable med key/value, så en mere kompliceret
>>struktur i xml filen giver vel næppe nogen mening?
>
>
> Mit problem er jo, at jeg har et ping-pong spil, som jeg gerne vil have at
> brugeren kan ændre via en config fil. Min originale fil så ud som:
> #Start på fil
> [flade]
> "baggrund" = "20,20,20"
> [enhed]
> "punkt" = "Y"
> [enhed]
> "punkt" = "N"
> "punkt2" = "Y"
> #Slut på fil
> Du har nok ret i, at man ikke kan bruge en Properties, men hvad skal man
> så gøre? Min originale idé var jo noget med noget regexp...

Du kan sagtens bruge en properties fil, men du bliver nødt til at være
lidt kreativ mht dine name/value par:

flade_baggrund=20.20.20
enhed_punkt1=y
enhed_punkt2=n
enhed_punkt3=y

etc. etc.

Nogle af mine properties filer er 200 linier lange!

Malte (28-02-2005)
Kommentar
Fra : Malte


Dato : 28-02-05 20:51

Malte wrote:
>
>
> Du kan sagtens bruge en properties fil, men du bliver nødt til at være
> lidt kreativ mht dine name/value par:
>
> flade_baggrund=20.20.20
> enhed_punkt1=y
> enhed_punkt2=n
> enhed_punkt3=y
>
> etc. etc.
>
> Nogle af mine properties filer er 200 linier lange!

Faktisk kan du sagtens brug XML, du skal så blot bruge en XML parser
(xerces fx.). Lidt mindre elegant end en Properties fil, men med det
moment, som XML har, er det altid en god ide at sætte sig ind it det.
Du vil naturligvis så løbe ind i brugere, som ikke kan finde ud af at
holde XML filen well-formed. Med Properties filer er det lidt simplere.

Thomas D Ahle (01-03-2005)
Kommentar
Fra : Thomas D Ahle


Dato : 01-03-05 07:30

Mon, 28 Feb 2005 20:51:25 +0100. skrev Malte:

> Malte wrote:
>>
>>
>> Du kan sagtens bruge en properties fil, men du bliver nødt til at være
>> lidt kreativ mht dine name/value par:
>>
>> flade_baggrund=20.20.20
>> enhed_punkt1=y
>> enhed_punkt2=n
>> enhed_punkt3=y
>>
>> etc. etc.
>>
>> Nogle af mine properties filer er 200 linier lange!
>
> Faktisk kan du sagtens brug XML, du skal så blot bruge en XML parser
> (xerces fx.). Lidt mindre elegant end en Properties fil, men med det
> moment, som XML har, er det altid en god ide at sætte sig ind it det.
> Du vil naturligvis så løbe ind i brugere, som ikke kan finde ud af at
> holde XML filen well-formed. Med Properties filer er det lidt simplere.

Hvis jeg hverken kan lave "grupper" i min xml eller proberties fil, så
tror jeg altså at det bliver endnu svære for brugeren at holde rent.
Tænk nu hvis de ville have 20 bolde og 19 bat? Og så skulle jeg jo
stadig igang med regexp for at finde ud af hvor værdien bold18_baggrund
skulle sættes ind.

Derfor tror jeg at den bedste metode er at dele filen op i grupper som:
[flade]
baggrund:pix/baggrund.jpeg
hoejde: 400
[bold]
baggrund:pix/bold1.png
fart:1.5
[bold]
baggrund:pix/bold2.png
fart:1.2
-
osv. Det kræver vel, at man først splitter strengen op ved [] i et
String array, og så skulle man vel nok kunne hente informationerne på
hver side af kolon eller =.

Malte (01-03-2005)
Kommentar
Fra : Malte


Dato : 01-03-05 16:11

Thomas D Ahle wrote:
>
> Hvis jeg hverken kan lave "grupper" i min xml eller proberties fil, så
> tror jeg altså at det bliver endnu svære for brugeren at holde rent.
> Tænk nu hvis de ville have 20 bolde og 19 bat? Og så skulle jeg jo
> stadig igang med regexp for at finde ud af hvor værdien bold18_baggrund
> skulle sættes ind.
>
> Derfor tror jeg at den bedste metode er at dele filen op i grupper som:
> [flade]
> baggrund:pix/baggrund.jpeg
> hoejde: 400
> [bold]
> baggrund:pix/bold1.png
> fart:1.5
> [bold]
> baggrund:pix/bold2.png
> fart:1.2
> -
> osv. Det kræver vel, at man først splitter strengen op ved [] i et
> String array, og så skulle man vel nok kunne hente informationerne på
> hver side af kolon eller =.

Du kan godt lave grupper i din XML fil, men så kan du nok ikke bruge et
Properties objekt til at læse den.

Thomas D Ahle (01-03-2005)
Kommentar
Fra : Thomas D Ahle


Dato : 01-03-05 17:04

> Du kan godt lave grupper i din XML fil, men så kan du nok ikke bruge et
> Properties objekt til at læse den.

Hvad vil du så anbefale?

Malte (01-03-2005)
Kommentar
Fra : Malte


Dato : 01-03-05 18:13

Thomas D Ahle wrote:
>>Du kan godt lave grupper i din XML fil, men så kan du nok ikke bruge et
>>Properties objekt til at læse den.
>
>
> Hvad vil du så anbefale?

Lav en lille klasse, som kan håndtere XML, parse den og brug data.

Thorbjoern Ravn Ande~ (01-03-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 01-03-05 18:17

Malte <forgetme@spam_here.nowhere.com> writes:

> Lav en lille klasse, som kan håndtere XML, parse den og brug data.

Kig på Commons Digester fra Apache Jakarta.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn/

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste