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

Entrée/Sortie Java Discussion :

vérifier la position d'une chaine de caractère dans un fichier et la ressortir


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Points : 64
    Points
    64
    Par défaut vérifier la position d'une chaine de caractère dans un fichier et la ressortir
    Finally.java

    Bonjour,

    Alors voilà j'ai un texte :
    #!/bin/csh -xv
    #BSUB -J calmod_POGO_2CU fichie.txt
    #BSUB -o calmod_POGO_2CU.o%J
    #BSUB -L /bin/csh

    umask 002

    #----------------------------------------------------------------------
    set dir_listing = jdfgjkdfnbjkdfnbjnfdbndfjbndfbndfkb
    jnfjkg
    $gdfgdfg
    dfgdfgdfg74654654fdg
    fdgdfg
    fgdf
    set toto = tata
    fgfg
    fg;hmfh
    set toto = tutu2
    dfdsfgdfg
    set nono = ueueue777
    set khjkhjkhkj 8787687657
    titi = tutu
    set a = titi
    set b = $toto
    set c = 7 + $toto
    set d = $toto + 9
    set e = $nono + $toto
    set k = $jhgjgh + {k}

    et mon code :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    import java.awt.List;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    /**
     * Elle recup ligne de forme : set ... = ... sans le $(...) 
     * @author ksmaili
     *return : 1 fichier xml + le fichier texte de type CSH que l'on veux
     */
    public class RecupLineWithoutSymboleTest {
    	 
    	private static String[] testVar;
     
    	private static ArrayList<String> indexes = new ArrayList<>();
    	private static ArrayList<String> Liste1 = new ArrayList<String>();
     
     
    	public static void main(String[] args) throws IOException {
     
    		final String fichier = "C:\\Users\\ksmaili\\workspace\\fichiertxtP2CSH.txt";
    		String xmlFileName = "C:\\Users\\ksmaili\\workspace\\XMLpartie2.xml";
    		Classement cl = new Classement();
    		Finally fnl = new Finally();
    		// lit le fichier ligne par ligne
    		try {
    			// lire un fichier
    			final InputStream ips = new FileInputStream(fichier);
    			final InputStreamReader ipsr = new InputStreamReader(ips);
    			final BufferedReader br = new BufferedReader(ipsr);
    			// lire ligne par ligne
    			String ligne;
    			while ((ligne = br.readLine()) != null) {
    				// System.out.println(ligne);
    				// je splite pour avoir la clé et la valeur pour une comparaison prochaine
    				testVar = ligne.split("=");
     
    				if (ligne.matches("^set.*=.*") && !ligne.contains("$")) {
    					// je ne fais rien car la ligne est correcte et correspond par exemple a set blabla = 12
    				} else if (ligne.matches("^set.*=.*") && ligne.contains("$")) {
     
    					// parcourir la liste de la methode lineDollar()
    					ArrayList<String> listVal = fnl.lineDollar(ligne);
    					Iterator it = listVal.iterator();
    				
    					// Vérifier la position avant ou apres du $...
     
     
     
     
    					
    					
    					// Si la ligne est du style set blabla = $asd + 34 alors il me faut supprimer $asd et le signe  +
    					ligne = fnl.count(ligne);
    				} else {
    					// dans le cas contraire exemple eewewewewewewewew  ou esd = wwewe alors je mettre la ligne vide
    					ligne = "";
    				}
     
    				// Si la ligne n´est pas vide
    				if (ligne.length() > 0) {
    					// je verifie si son index peut etre creer et sauvegarder dans la liste d´indexes ou pas 
     
    					if (fnl.creerIndex(testVar[0])) {
     
    						//System.out.println("On récupère : " + ligne);
    						Pattern p=Pattern.compile("^set(.*)=(.*)");
    						Matcher m=p.matcher(ligne);
    						while(m.find()) {
    							//System.out.println(m.group(1)); // affiche les clés 
    							//System.out.println(m.group(2)); // affiche les valeurs des clés
     
     
    							// Maintenant je vérifie si la clé est déjà présente dans la map
    							boolean cle = cl.verif(m.group(1));
    							boolean valeur = cl.verif(m.group(2));
     
    							// Si elle n'est pas présente, on l'ajoute dans la map 
    							if (cle != true && valeur != true ){
    								cl.add(m.group(1), m.group(2));
    								//System.out.println(cle); 
    							}
    						}
    					}
     
    				}
    				else
    				{
    					// stoker testvar dans une liste afin de pouvoir l'écrire plus tard
    					Liste1.add(testVar[0]);
     
    				}
    			}
    			br.close(); // On ferme le flux
     
    			// ecrire le xml
    			cl.ecrire(xmlFileName);
     
    			//ouvrir un fichier en ecriture
     
    			try {
    				BufferedWriter buf = new BufferedWriter(new FileWriter(new File("C:\\Users\\ksmaili\\workspace\\nouveaufichier.txt")));
     
    			// boucler sur  les 6 er lignes de la liste de lignes sans traitement 
    			int i;
    			int fin = 5;
     
    			for (i=0; i<fin; i++){
    				buf.write(Liste1.get(i)+"\n");
    			}
     
    			// ecrire la partie qui dépend du dico
    			buf.write("#>"+ "\n");
     
    			// cree iterator pour parcourir cl.recup() 	
    			Iterator<String> iterat = cl.recup().iterator();
     
    			while (iterat.hasNext() ){
    				 Object element = iterat.next().trim();
    		         //System.out.print(element + " ");
     
    		         buf.write("set " + element +" =" + " {"+element+"}" +"\n");
     
    			}
     
    			buf.write("#<"+ "\n");
     
     
    			//ecrire les lignes suivantes de la liste de lignes sans traitement
     
    			for (i=fin; i<Liste1.size(); i++){
    				buf.write(Liste1.get(i)+"\n");
    			}
     
    			buf.close();
     
    		} catch (final Exception e) {
    			System.out.println(e.toString());
     
    		}
    			finally{
     
    			}
     
    		// if(!ligne.contains("$")){
     
    	}		
    		catch (final Exception e) {
    		System.out.println(e.toString());
     
    	}finally{
     
    	}
     
    	}
     
    }
    Grâce a mon code j'arrive a obtenir le xml du fichier principal :

    <?xml version="1.0" encoding="utf-8"?>
    <parametters>
    <value name = "dir_listing">
    jdfgjkdfnbjkdfnbjnfdbndfjbndfbndfkb
    </value>
    <value name = "toto">
    tata
    </value>
    <value name = "k">
    {k}
    </value>
    <value name = "d">
    9
    </value>
    <value name = "nono">
    ueueue777
    </value>
    <value name = "c">
    7
    </value>
    <value name = "a">
    titi
    </value>
    </parametters>
    et son nouveau texte modifier ( car il me faut un format comme celui ci pour qu'il puisse être traiter par l'IHM ) :

    #!/bin/csh -xv
    #BSUB -J calmod_POGO_2CU fichie.txt
    #BSUB -o calmod_POGO_2CU.o%J
    #BSUB -L /bin/csh

    #>
    set dir_listing = {dir_listing}
    set toto = {toto}
    set k = {k}
    set d = {d}
    set nono = {nono}
    set c = {c}
    set a = {a}
    #<
    umask 002

    #----------------------------------------------------------------------
    jnfjkg
    $gdfgdfg
    dfgdfgdfg74654654fdg
    fdgdfg
    fgdf
    correspond a la valeur de la clé fgfg
    fg;hmfh
    dfdsfgdfg
    set khjkhjkhkj 8787687657
    titi
    set b
    set e
    maintenant mon problème est que j'aimerai créer une fonction qui puisse me dire si ma chaine de caractère est situer avant la valeur de la clé ou après.
    par exemple un boolean qui me renvoi 1 si => chaine avant la valeur de la clé
    ou 0 si => chaine après la valeur de la clé {d} ( voir xml )

    exemple : si je lui donne la ligne set d = $toto + 9 , le programme doit vérifier la position du $toto



    ps : mon code fonctionne, mais lague beaucoup quand je fais run !
    bizarre nan ?

  2. #2
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 262
    Points : 634
    Points
    634
    Par défaut
    Salut,
    je ne suis pas sûre d'avoir compris mais si la ligne contenant la clé est de cette
    forme : set blabla = $nom + clé ou set blabla = clé + $nom alors
    voici ce que j'ai trouvé pour le code de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public static int positionDelaChaine(String s){
            //chaine avant clé
            if( s.substring( s.indexOf("=") + 1 ).trim().charAt(0) == '$') return 1;
            //chaine après clé
            return 0;
        }
    Aujourd'hui apprenant, demain appreneur.
    N'accuse pas le puits d'être trop profond,
    c'est peut-être ta corde qui est trop courte

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par lankoande Voir le message
    Salut,
    je ne suis pas sûre d'avoir compris mais si la ligne contenant la clé est de cette
    forme : set blabla = $nom + clé ou set blabla = clé + $nom alors
    voici ce que j'ai trouvé pour le code de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public static int positionDelaChaine(String s){
            //chaine avant clé
            if( s.substring( s.indexOf("=") + 1 ).trim().charAt(0) == '$') return 1;
            //chaine après clé
            return 0;
        }
    Il y a ce code là trouver par Joel Drigo qui est assez générique :


    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
    public class Test {
     
    	public static void main(String[] args) {
     
    		String str = "$ojjhg + oep +  $toto";
    		String str1 = " ";
    		String tata = "$tyty + 5";
    		String titi = "6 - $iuou";
     
    		String valeurCherchee ="$toto";
    		String valeurRef ="oep";
     
    		String[] split = str.split(" ");
     
    		if ( split.length>0 ) { 
    		   final int fin = split.length-1;
    		   for(int index=0; index<split.length;index++){
    		     String varname = split[index];
    		     if ( varname.startsWith("$") ) {
    		         if(index==0) {
    		             System.out.println(varname +" au début");
    		        }
    		        else if (index==fin) {
    		             System.out.println(varname +" à la fin");
    			}
    			else {
    		             System.out.println(varname +" entre " + split[index-1] + " et " + split[index+1]);
    		        }
    		    }
    		}
     
     
    	}
     
     
     
     
     
    }
    	}
    La j'essaye de trouver comment je puisse faire pour en faite chercher la position valeurCherchee en fonction de la position valeurRef .
    Je dois bidouiller un truc mais j'y vois pas très clair

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 262
    Points : 634
    Points
    634
    Par défaut
    Citation Envoyé par khalous91 Voir le message
    Il y a ce code là trouver par Joel Drigo qui est assez générique :


    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
    public class Test {
     
    	public static void main(String[] args) {
     
    		String str = "$ojjhg + oep +  $toto";
    		String str1 = " ";
    		String tata = "$tyty + 5";
    		String titi = "6 - $iuou";
     
    		String valeurCherchee ="$toto";
    		String valeurRef ="oep";
     
    		String[] split = str.split(" ");
     
    		if ( split.length>0 ) { 
    		   final int fin = split.length-1;
    		   for(int index=0; index<split.length;index++){
    		     String varname = split[index];
    		     if ( varname.startsWith("$") ) {
    		         if(index==0) {
    		             System.out.println(varname +" au début");
    		        }
    		        else if (index==fin) {
    		             System.out.println(varname +" à la fin");
    			}
    			else {
    		             System.out.println(varname +" entre " + split[index-1] + " et " + split[index+1]);
    		        }
    		    }
    		}
     
     
    	}
     
     
     
     
     
    }
    	}
    La j'essaye de trouver comment je puisse faire pour en faite chercher la position valeurCherchee en fonction de la position valeurRef .
    Je dois bidouiller un truc mais j'y vois pas très clair
    Salut khalous91, tu sais j'ai pas compris ce que tu veux dire par position valeurCherchee en fonction de le position valeurRef ! Je pensais que
    ce code résolvais ce problème !
    Aujourd'hui apprenant, demain appreneur.
    N'accuse pas le puits d'être trop profond,
    c'est peut-être ta corde qui est trop courte

Discussions similaires

  1. [Débutant] Trouver la position d'une chaine de caractère dans un fichier .txt
    Par martineaston dans le forum MATLAB
    Réponses: 4
    Dernier message: 19/06/2013, 14h14
  2. Réponses: 3
    Dernier message: 13/11/2006, 16h08
  3. Réponses: 4
    Dernier message: 18/07/2006, 16h31
  4. [VB]Recherche d'une chaine de caractère dans un fichier
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 16/02/2006, 09h10
  5. Ecriture d'une chaine de caractères dans un fichier
    Par fleur_de_rose dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2006, 09h34

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