Avatar billede jolly_jay Nybegynder
12. oktober 2005 - 21:05 Der er 6 kommentarer og
1 løsning

Find linie et et dokument der matcher

Jeg er ved at lave et lille program som skal kunne lede et tekst dokument igennem efter en bestem string. Det er dog ikke så svært. Men den linie der er i filen, har et forskellige nummer, som 1 og 12.

Jeg har kigget lidt på RegEx, men har dog ikke kunne få det til at virke (da jeg ikke har nogen erfaring med det), jeg håber at nogen kan se hvad jeg gør forkert:

private static void readFile(String path, boolean change){
    try {
        FileReader fstream = new FileReader(path);
        BufferedReader in = new BufferedReader(fstream);
        String line = "";
       
        if(!in.ready())
            throw new IOException();
       
        Pattern p = Pattern.compile("user_pref(\"network.proxy.type\", [0-9]*);");
        while((line = in.readLine()) != null){
            System.out.print(p.pattern() + " - ");
            Matcher m = p.matcher(line);
            System.out.print(m.matches() + " - ");
            System.out.println(line);
        }
       
        in.close();
       
    } catch (FileNotFoundException e) {
        System.out.println(e);
    } catch (IOException e) {
        System.out.println(e);
    }
}

Jeg har importeret:
import java.util.regex.*;

Håber nogen kan finde fejlen, eller lede mig på rette spor :)
Avatar billede arne_v Ekspert
12. oktober 2005 - 21:12 #1
kunne du ikke vise et stykke input fil + hvad du vil have skrevet ud af det ?
Avatar billede jolly_jay Nybegynder
12. oktober 2005 - 21:15 #2
Filen indeholder dette:

user_pref("network.cookie.prefsMigrated", true);
user_pref("network.enableIDN", false);
user_pref("network.proxy.ftp", "192.168.0.200");
user_pref("network.proxy.ftp_port", 4320);
user_pref("network.proxy.gopher", "192.168.0.200");
user_pref("network.proxy.gopher_port", 4320);
user_pref("network.proxy.http", "192.168.0.200");
user_pref("network.proxy.http_port", 4320);
user_pref("network.proxy.share_proxy_settings", true);
user_pref("network.proxy.ssl", "192.168.0.200");
user_pref("network.proxy.ssl_port", 4320);
user_pref("network.proxy.type", 1);

og det er den sidste linie jeg gerne vil have ud, uanset hvilket tal der står til sidst.
Avatar billede arne_v Ekspert
12. oktober 2005 - 21:25 #3
eksempel:

package october;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Find {
    private static final Pattern p = Pattern.compile("user_pref\\(\"network.proxy.type\", ([0-9]+)\\);");
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("C:\\test.js"));
        String line;
        while((line = br.readLine()) != null) {
            System.out.println(line);
            Matcher m = p.matcher(line);
            if(m.find()) {
                System.out.println("bingo ! (number=" + m.group(1) + ")");;
            }
        }
        br.close();
    }
}
Avatar billede jolly_jay Nybegynder
12. oktober 2005 - 22:15 #4
Mange tak, jeg kunne se at fejlen lå i regex'en.

1000 tak for hjælpen, smid lige et svar for points :)
og hvis du kender et godt link til at lære regex så smid endelig også det ;)
Avatar billede arne_v Ekspert
12. oktober 2005 - 22:17 #5
svar
Avatar billede arne_v Ekspert
12. oktober 2005 - 22:18 #6
jeg har faktisk lært det meste jeg kan om regex udfra Java Docs på
Pattern klassen (og så en masse trial and error)

men der er regex tutorials på nettet
Avatar billede jolly_jay Nybegynder
12. oktober 2005 - 22:18 #7
Mange tak, jeg prøver at kigge på det
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