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

Java Discussion :

Fichier et replacement de chaîne


Sujet :

Java

  1. #1
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut Fichier et replacement de chaîne
    Bonjour,

    J'aurais souhaité effectuer un remplacement de chaîne massif à partir d'un fichier. Au delà d'un certain nombre de caractères la ligne est tronquée puis positionnée sur la ligne suivante (& en préfixe). L'idée serait de remplacer \n& ou \n\r& par rien.

    1. Je ne suis pas un killer en java mais je sais faire des recherches et m'en inspirer

    2. Je n'ai rien trouvé de très excitant : j'ai testé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .replaceall("\n\r&","")
    qui ne fonctionne pas dans une logique de ligne à ligne visiblement (List Array)
    J'ai voulu tester de lire la ligne puis les lignes suivantes et de concaténer mais cela me semble tellement lourd et préhistorique pour un simple replace.

    Ne puis-je pas tout mettre dans un tableau et traiter ça massivement? Oui mais quel type de tableau sur les 36 disponibles..?

    Je vous remercie pour vos suggestions et exemples.

    Bonne journée.

    SR

    fichier source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    'RECORD','Produit','Client','VARIABLES','P1','P2','P3','P4','P5','P6','P7',
    &'P8','P9','P10','P11','P12','P24','P25','P26','P27','P28','P29','P30','P31',
    &'P32','P33','P34','P35'
    'NUMERIC 12.0','STRING 12','STRING 12','STRING 12','NUMERIC 19.4',
    &'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4',
    &'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4',
    &'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4',
    &'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4',
    &'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4'
    1,'PHE','AP','Reel',1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0
    2,'PHE','AP','Approuve',1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    3,'PHE','AP','Coef.Saison',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    Résultat attendu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'RECORD','Produit','Client','VARIABLES','P1','P2','P3','P4','P5','P6','P7','P8','P9','P10','P11','P12','P24','P25','P26','P27','P28','P29','P30','P31','P32','P33','P34','P35'
    'NUMERIC 12.0','STRING 12','STRING 12','STRING 12','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4'
    1,'PHE','AP','Reel',1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0
    2,'PHE','AP','Approuve',1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    3,'PHE','AP','Coef.Saison',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

  2. #2
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut
    Bah finalement en stockant le fichier dans une variable de type String cela me semble plutôt OK!

    Ma démarche est-elle la bonne? Merci de vos retours!

    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
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.nio.file.Files;
    import java.nio.file.Paths;
     
    public class ReplaceInFile {
     
        public static void main(String[] args) throws IOException {
     
            String sourceContent = "";
            String targetContent = "";
     
            try {
                sourceContent = new String(Files.readAllBytes(Paths.get("C:\\mySourceFile.txt")));
                targetContent = sourceContent .replaceAll("\\r\\n&", "");
                PrintWriter out = new PrintWriter("C:\\myTargetFile.txt");
                out.println(targetContent );
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

  3. #3
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par sroux Voir le message
    Bonjour,

    J'aurais souhaité effectuer un remplacement de chaîne massif à partir d'un fichier. Au delà d'un certain nombre de caractères la ligne est tronquée puis positionnée sur la ligne suivante (& en préfixe). L'idée serait de remplacer \n& ou \n\r& par rien.
    [...]
    J'ai voulu tester de lire la ligne puis les lignes suivantes et de concaténer mais cela me semble tellement lourd et préhistorique pour un simple replace.
    Bonjour,

    Même si c'est "préhistorique", la concaténation semble ce qui est demandé : transformer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'RECORD','Produit','Client','VARIABLES','P1','P2','P3','P4','P5','P6','P7',&'P8','P9','P10','P11','P12','P24','P25','P26','P27','P28','P29','P30','P31', &'P32','P33','P34','P35'
    
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'RECORD','Produit','Client','VARIABLES','P1','P2','P3','P4','P5','P6','P7','P8','P9','P10','P11','P12','P24','P25','P26','P27','P28','P29','P30','P31','P32','P33','P34','P35'
    
    c'est de la concaténation. Mais ça peux se faire avec un stringbuilder par exemple. Avec les flux ça serait moins lisible.

    Ceci fonctionne, sans librairie externe :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    package test;
     
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
     
    public class Record {
     
        public static void main(String[] args) {
            List<String> source = Arrays.asList(
                "'RECORD','Produit','Client','VARIABLES','P1','P2','P3','P4','P5','P6','P7',\r\n", 
                "&'P8','P9','P10','P11','P12','P24','P25','P26','P27','P28','P29','P30','P31',\r\n", 
                "&'P32','P33','P34','P35'\r\n",
                "'NUMERIC 12.0','STRING 12','STRING 12','STRING 12','NUMERIC 19.4',\r\n", 
                "&'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4',\r\n", 
                "&'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4',\r\n", 
                "&'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4',\r\n", 
                "&'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4',\r\n", 
                "&'NUMERIC 19.4','NUMERIC 19.4','NUMERIC 19.4'\r\n",
                "1,'PHE','AP','Reel',1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0\r\n", 
                "2,'PHE','AP','Approuve',1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r\n", 
                "3,'PHE','AP','Coef.Saison',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r\n" 
                );
     
            List<String> resultat = new ArrayList<String>();
            StringBuilder builder = new StringBuilder();
     
            for (String string : source) {
                if (string == null) continue;
                if (string.length() == 0) continue;
     
                if (string.charAt(0) != '&') { // nouvelle ligne
                    if (builder.length() > 0) {
                        resultat.add( builder.toString() );
                        builder.setLength(0);
                    }
                } else {
                    string = string.substring(1); // - '&' initial
                }
                string = string.replaceAll("\r\n", "");
                builder.append( string );
            }
     
            // derniere ligne
            if (builder.length() > 0) {
                resultat.add( builder.toString() );
                builder.setLength(0);
            }
     
            // resultat
            for (String string : resultat) {
                System.out.println(string);
            }
        }
     
     
    }

  4. #4
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par sroux Voir le message
    Bah finalement en stockant le fichier dans une variable de type String cela me semble plutôt OK!

    Ma démarche est-elle la bonne? Merci de vos retours!
    Si tu peux accéder à tes données d'un bloc, c'est effectivement plus efficace. Il faut aussi voir la taille de ce fichier, au cas où il évoluerait vers un volume excédant la capacité de ce traitement. Toi seul connaît ces contraintes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/03/2014, 14h28
  2. Réponses: 4
    Dernier message: 24/05/2010, 13h06
  3. Réponses: 8
    Dernier message: 18/03/2010, 20h22
  4. Réponses: 1
    Dernier message: 24/06/2008, 14h11
  5. Réponses: 3
    Dernier message: 16/10/2007, 13h50

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