|  | 		    
					
        
         
          
         
	
          | |  | 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/ |  |  | 
 |  |