Avatar billede doughboy.dk Nybegynder
30. december 2003 - 15:47 Der er 28 kommentarer og
2 løsninger

Udvælgelse fra en streng

Hejsa

Jeg sidder og leger lidt med et program, der kan udregne diverse oplysninger til et spil.

Jeg indlæser f.eks. følgende streng:
29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene

Hvordan kan man udpille "!N! MOr's ThaCina", "64185", "vandt" og "FenrisUlvene"

De dele af strengen, der ønskes fra strengen varierer meget både i længde og navn, så det er en generel metode til at udpille disse værdi, og ikke for specifik for ovenstående eksempel.

Det eneste der ligger fast fra gang til gang er dato angivelsen : "29-12-2003 21:48" den er altid 16 tegn lang.

Håber der er nogen der kan hjælpe mig :o)

Med venlig hilsen
Claus
Avatar billede thesurfer Nybegynder
30. december 2003 - 15:59 #1
Jeg går ud fra at følgende ting er faste:
29-12-2003 21:48 (dato og tid, 16 tegn lang)
(#X) (hvor X er det nummer)
fra din klan
et angreb mod
(#X) (hvor X er det nummer)
) fra

Dvs:
Navnet er fra tegn 17 og til positionen af det første "(#"
Tallet er fra positionen af "(#" + 1 og til position af det første ")"
"Vandt" er fra positionen af "fra din klan" + 13 og til pos af "et angreb mod" - 1
Modstanderen er fra ("mod" + 4) og til pos af "(#"
Modstanderens tal er fra det andet ("(#" + 3) og til ")"
Modstanderens klan er fra det sidste "fra" og resten af strengen.

Det godt være at jeg har taget fejl antal tegn, men det kan man nemt rettes.
Jeg kan desværre ikke lave det for dig, da jeg ikke programmerer i Java.
Men Java-programmører burde få en ide til hvordan det kan gøres.
Avatar billede doughboy.dk Nybegynder
30. december 2003 - 16:13 #2
Takker mange gange for bidraget. Det gav i hvert fald et forslag til hvordan det kan løses, samt noget at arbejde udfra.
Må tilstå jeg slet ikke havde tænkt på en sådan opdeling :o)
Avatar billede thesurfer Nybegynder
30. december 2003 - 16:19 #3
Jeg ha lavet det i JavaScript.. så skal du bare have en eller anden til at oversætte de:

<script type="text/JavaScript">
<!--
var str = "29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene";
var dato = str.substring(0, 16)
var ven_navn = str.substring(18, str.indexOf("(#") - 1);
var ven_nummer = str.substring(str.indexOf("(#") + 2, str.indexOf(")"));
var vt = str.substring(str.indexOf("fra din klan") + 13, str.indexOf("et angreb mod") - 1);
str = str.substring(str.indexOf(vt), str.length);
var fjende_navn = str.substring(str.indexOf("mod") + 4, str.indexOf("(#") - 1);
var fjende_nummer = str.substring(str.indexOf("(#") + 2, str.indexOf(")"));
var fjende_klan = str.substring(str.indexOf("fra") + 4);

var msg = "";
msg += "Dato: " + dato + "\n";
msg += "Ven navn: " + ven_navn + "\n";
msg += "Ven nummer: " + ven_nummer + "\n";
msg += "Vandt/tabt: " + vt + "\n";
msg += "Fjende navn: " + fjende_navn + "\n";
msg += "Fjende nummer: " + fjende_nummer + "\n";
msg += "Fjende klan: " + fjende_klan + "\n";

alert(msg); // viser en dialogbox med værdierne

//-->
</script>
Avatar billede thesurfer Nybegynder
30. december 2003 - 16:26 #4
"Working with Java Strings": http://docs.rinet.ru:8083/WebJPP/ch10.htm
"Searching Strings": http://docs.rinet.ru:8083/WebJPP/ch10.htm#SearchingStrings

Så burde du kunne lave det selv :)

Hvad skal man bruge for at kunne programmere i Java på sin computer (links)?
Avatar billede arne_v Ekspert
30. december 2003 - 16:30 #5
Avatar billede thesurfer Nybegynder
30. december 2003 - 16:34 #6
arve_v> Takker :)
Du kan da godt oversætte det.. ik, ?
Af hvad jeg har set på #SearchingStrings-urlen, er meget ikke meget forskel, på det punkt..
Avatar billede arne_v Ekspert
30. december 2003 - 16:36 #7
Jeg sidder og arbejder på en regular expression løsning !
Avatar billede thesurfer Nybegynder
30. december 2003 - 16:36 #8
Hmm.. den siger:

You have chosen to download J2SE(TM) v 1.4.2 with NetBeans(TM) IDE v 3.5.1 Cobundle.
Download j2sdk-1_4_2-nb-3_5_1-bin-windows.exe .
Filesize = 92,575,712 bytes.

IDE-tingsten er inkluderet..
Avatar billede arne_v Ekspert
30. december 2003 - 16:41 #9
import java.util.regex.*;

public class RecParse {
    public static void parse(String s) {
        Pattern p = Pattern.compile("([0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ )([^\\(]*)(\\(#)([0-9]+)(\\) fra din klan )([a-z]+)( et angreb mod )([A-Za-z0-9]+)( \\(#)([0-9]+)(\\) fra )([A-Za-z0-9]+)");
        Matcher m = p.matcher(s);
        m.find();
        System.out.println(m.group(2));
        System.out.println(m.group(4));
        System.out.println(m.group(6));
        System.out.println(m.group(12));
    }
    public static void main(String[] args) {
        parse("29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene");
    }
}
Avatar billede arne_v Ekspert
30. december 2003 - 16:41 #10
Output:

!N! MOr's ThaCina
64185
vandt
FenrisUlvene

(muligvis skal nogen af expressions rettes til)
Avatar billede arne_v Ekspert
30. december 2003 - 16:43 #11
Jeg ville have taget den uden NetBeans og så installeret Eclipse fordi jeg
foretrækker Eclipse fremfor NetBeans.

Men smag og behag er forskelligt - der er også dem som er glade for NetBeans.
Avatar billede thesurfer Nybegynder
30. december 2003 - 16:50 #12
Download stoppet efter 20,3 mb :)

Jeg aner ikke hvad NetBeans eller Eclipse er, men der må være en grund til, at du foretrækker din kombination :)
Og den har jeg tænkt mig at hente..

Den uden NetBeans, er det den der bare hedder "Download J2SE v 1.4.2_03" og "JRE"?
Avatar billede _carsten Nybegynder
30. december 2003 - 17:01 #13
Avatar billede arne_v Ekspert
30. december 2003 - 17:03 #14
Eclipse og NetBeans er IDE'er - ligesom Visual Studio.
Avatar billede arne_v Ekspert
30. december 2003 - 17:15 #15
Du skal have SDK for at udvikle.

JRE er runtime only.
Avatar billede thesurfer Nybegynder
30. december 2003 - 17:20 #16
Så prøver jeg bare igen :).. var igang med at downloade "JRE" versionen.. synes nok at jeg havde det den før (bundlet med Opera)..

OK.. Vi snupper en "SDK" i stedet.. men:
Windows Offline Installation, Multi-language (j2sdk-1_4_2_03-windows-i586-p.exe, 48.30 MB)

eller
Windows Installation, Multi-language (j2sdk-1_4_2_03-windows-i586-p-iftw.exe, 356.00 KB)

En offline version er vel bedre, da man så ikke behøver at downloade den igen, ved ny installation af Windows.. Korrekt?
Avatar billede arne_v Ekspert
30. december 2003 - 17:23 #17
Smag og behag er igen forskellig - jeg hader de der "lille installere som
henter fra nettet" - man ved aldrig hvad man henter og man kan ikke
genskabe en installation, så jeg ville tage den store.
Avatar billede doughboy.dk Nybegynder
30. december 2003 - 17:41 #18
Det er jo fantastisk :)

Dog er der et lille problem, ved 8. expression ([A-Za-z0-9]+)

TAger man f.eks. følgende streng:
23-12-2003 22:20 !N! Eazy-E (#51480) fra din klan vandt et angreb mod Kong Ellesar [Jul] (#57065) fra Thors Hammer

Der melder den en fejl da stammen hedder "Kong Ellesar [Jul]" - dvs både mellemrum samt [] som den ikke er glad for.
Hvordan ændrer man det? :)
Avatar billede thesurfer Nybegynder
30. december 2003 - 17:42 #19
Man bruger min metode :) hæhæhæ
Nå, ikke.. :)
Avatar billede arne_v Ekspert
30. december 2003 - 17:43 #20
Jeg prøver lige om jeg kan rette regexp'en til.
Avatar billede arne_v Ekspert
30. december 2003 - 17:46 #21
import java.util.regex.*;

public class RecParse {
    public static void parse(String s) {
        Pattern p = Pattern.compile("([0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ )([^\\(]*)(\\(#)([0-9]+)(\\) fra din klan )([a-z]+)( et angreb mod )([A-Za-z0-9 \\[\\]]+)( \\(#)([0-9]+)(\\) fra )([A-Za-z0-9 ]+)");
        Matcher m = p.matcher(s);
        m.find();
        System.out.println(m.group(2));
        System.out.println(m.group(4));
        System.out.println(m.group(6));
        System.out.println(m.group(12));
        System.out.println("====");
    }
    public static void main(String[] args) {
        parse("29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene");
        parse("23-12-2003 22:20 !N! Eazy-E (#51480) fra din klan vandt et angreb mod Kong Ellesar [Jul] (#57065) fra Thors Hammer");
    }
}
Avatar billede doughboy.dk Nybegynder
30. december 2003 - 17:46 #22
thesurfer -> jeps den kunne bruges til en webudgave :)

arne_v -> lyder godt, og mange tak :)
Avatar billede arne_v Ekspert
30. december 2003 - 17:46 #23
!N! MOr's ThaCina
64185
vandt
FenrisUlvene
====
!N! Eazy-E
51480
vandt
Thors Hammer
====
Avatar billede arne_v Ekspert
30. december 2003 - 17:48 #24
Lidt smartere:

import java.util.regex.*;

public class RecParse {
    public static void parse(String s) {
        Pattern p = Pattern.compile("([0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ )([^\\(]*)(\\(#)([0-9]+)(\\) fra din klan )([a-z]+)( et angreb mod )([^\\(]+)( \\(#)([0-9]+)(\\) fra )(.+)");
        Matcher m = p.matcher(s);
        m.find();
        System.out.println(m.group(2));
        System.out.println(m.group(4));
        System.out.println(m.group(6));
        System.out.println(m.group(12));
        System.out.println("====");
    }
    public static void main(String[] args) {
        parse("29-12-2003 21:48 !N! MOr's ThaCina (#64185) fra din klan vandt et angreb mod klods (#66423) fra FenrisUlvene");
        parse("23-12-2003 22:20 !N! Eazy-E (#51480) fra din klan vandt et angreb mod Kong Ellesar [Jul] (#57065) fra Thors Hammer");
    }
}
Avatar billede doughboy.dk Nybegynder
30. december 2003 - 17:49 #25
Mange tak arne - Smider du et svar ? :)
Avatar billede arne_v Ekspert
30. december 2003 - 17:51 #26
ok
Avatar billede doughboy.dk Nybegynder
30. december 2003 - 17:53 #27
thesurfer, hvis du smider et svar, smider jeg 25 point mere i, så du også få lidt for din hjælpsomhed samt for forslaget i JS :)

I hvert fald mange tak for hjælpen :)
Avatar billede thesurfer Nybegynder
30. december 2003 - 17:54 #28
Det kan jeg da godt :)
Avatar billede arne_v Ekspert
30. december 2003 - 17:56 #29
Man kunne sagtens have lavet substring og indexOf i Java også.

Jeg vurderede bare at det ville være kønnere i regular expressions.

Om det så blev det - tja ....
Avatar billede thesurfer Nybegynder
30. december 2003 - 18:02 #30
Takker for points, og godt nytår! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester