IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Regex perl] Matcher un gros fichier


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Par défaut [Regex perl] Matcher un gros fichier
    bonjour

    j'ai une fonction pour parser des textes qui marche trés bien mais des que je lui donne un string trés gros (que je upload d'un fichier de 9 ou 10 MO),
    ça plente , avec un java heap space.

    voilà ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    public ArrayList MatchMessageBuffer(String regex, StringBuffer message) {
                ArrayList groupVec = new ArrayList();
                int groups;
                PatternMatcher matcher;
                PatternCompiler compiler;
                Pattern pattern = null;
                PatternMatcherInput input;
                MatchResult result;
                compiler = new Perl5Compiler();
                matcher = new Perl5Matcher();
                try {
                    pattern = compiler.compile(regex);
                } catch (org.apache.oro.text.regex.MalformedPatternException e) {
                    groupVec.add("NO MATCH");
                }
                System.out.println("1*");
                input = new PatternMatcherInput(message.toString());
     
     
                if (matcher.contains(input ,pattern)) {
                    result = matcher.getMatch();
                    groups = result.groups();
     
                     // Start at 1 because we just printed out group 0
     
                    for (int group = 0; group < groups; group++) {
                        try {
                            if (result.group(group).length() > 0) {
                                groupVec.add(result.group(group));
                            }
                            else {
                                groupVec.add("NO MATCH");
                            }
                        } catch (java.lang.NullPointerException p) {
                            groupVec.add("NO MATCH");
                        }
                    } //end for
                } else {
                    groupVec.add("NO MATCH");
                }
                if (groupVec.size() <= 0) {
                    groupVec.add("NO MATCH");
                }
                return groupVec;
            }

    et ça plente biensure au niveau de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new PatternMatcherInput(message.toString());
    la conversion du stringbuffer en string.

    merci pour vos aide trés attendu

  2. #2
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Par défaut
    tu as deux types de solutions :

    1) regler le probleme de facon bourrin (en augmentant le java heap space) (ca se fait en ligne de commande quand tu lances java

    2) changer ton code, je regarde mais avec java.nio il me semble que tu peux utiliser les regex sur des flux

    tu as un exemples avec replace sur des stream ici

  3. #3
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Forcément, c'est pas surprenant que ça plante. Des fichiers de plusieurs méga ne se parsent pas d'un coup !
    Il faut utiliser des buffers pour faire ça !

Discussions similaires

  1. Peut-on lire des gros fichiers(100k) avec "TClientSocke
    Par Fred LEM dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/12/2004, 14h41
  2. Optimisation de la lecture de tres gros fichiers
    Par Lydie dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/07/2004, 14h09
  3. [JDOM] Gestion "gros fichiers"
    Par Haazheel dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 17/10/2003, 13h42
  4. Un langage pour lire, traiter et écrire de gros fichiers
    Par March' dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/04/2003, 15h26
  5. XML DOM et gros fichiers
    Par Manu_Just dans le forum APIs
    Réponses: 4
    Dernier message: 28/03/2003, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo