Récupérer des champs à remplir depuis un fichier texte

dino34 Messages postés 32 Date d'inscription jeudi 6 janvier 2011 Statut Membre Dernière intervention 3 novembre 2023 - 26 juil. 2019 à 22:20
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 - 24 août 2019 à 15:33
Bonjour:

Je cherche à récupérer des champs à remplir dans textarea depuis un fichier texte.

Les données entre bloc texte sur plusieurs lignes (entre "DATA") sont variables.

Note: INFO varient entre 10 jusqu’à 20 à partir du cinquième ligne

Exemple :
INFO-10-0 jusqu’à INFO-10-20( voir fichier joint)

Le fichier texte est le suivant :




j'ai utilisé le code suivant mais il me donne seulement groupe 1 et 2 de chaque nouvel ligne de DATA



try (Scanner sc = new Scanner(new File("C:\\text.txt"))) {
sc.useDelimiter("DATA");
String z = "\\s+(\\S+)";
Pattern pattern = Pattern.compile(z+z+z+z+z+z+z+z+z+z+z+z+z+z+z);
while (sc.hasNext()) {
Matcher matcher = pattern.matcher(sc.next());
if (matcher.find()) {

textArea.append("LEVELINFO=DATA=" + matcher.group(1) + " &&NAME= " + matcher.group(2) +"
&&VERAT2= matcher.group(8) +"&&CMD4= matcher.group(14) +";"+"\n");
textArea.append(""+"\n");




je cherche a avoir ceci :

la premiere ligne de DATA

LEVELINFO=DATA=INFO-10&&NAME=EQUIP&&VERAT2=v22&&CMD4= BYTE

le deuxième ligne de DATA

LEVELINFO=DATA=MAC1=$1&&MAC2=IPARP

LE troixième ligne de data :

LEVELINFO=DATA=INFO-10


la quatrime ligne de DATa

LEVELINFO=DATA=INFO-10&&ADRS=1&&4

la cinqieme ligne de data:

LEVELINFO=DATA=INFO-10-0&&NAMEPLAT=EQUIPW&&TI =0&&VAL1=10&&VAL2=11&&13

le 20 ieme ligne de DATA

LEVELINFO=DATA=INFO-10-20&&NAMEPLAT=EQUIPZ&&TI =0&&VAL1=40&&VAL2=50&&20

le 21 ieme ligne de DATA

LEVELINFO=DATA=MAC1=$100&&MAC2=IPARP200


Comment faire un break dans chaque nouvel ligne dans DATA dans l'expression régulière ?

Merci pour support et suggestion .

35 réponses

salut Whismeril:

çà marche bien merci beaucoup.

j'ai d'autre question sur la partie la plus difficile :

(?<info>INFO-\\d{1,3}-\\d{1,2})\\s+(?<namePlat>\\w+)\\s+(?:\w+\s+){3}(?<ti>\d+)\s+(?<val1>\\d+).*\\n.*\\n.*\\n.*(?<val1>\\d+).*\\n.*\\n.*(?<val2>\d+);


j'ai effectué plusieurs test rien n'est affiché sur la console .



DATA NAMEPLAT GR NI SI TI VAL1 WC
INFOP-0-0 EQUIPW ONE 0 NC 0 10

PL VER2 VER VAL2
11
12
13
14
15

DATA NAMEPLAT GR NI SI TI VAL1 WC
INFOP-0-1 EQUIPW ONE 0 NC 0 16

PL VER2 VER VAL2
17
18
19
20
21


je cherche que lorsque REGX trouve dans le texte ici deux elle m'ecrit :

LEVELINFO=DATA=INFO-0-0&&NAMEPLAT=EQUIPW&&TI 0&&VAL1=10&&VAL2=11&&15

LEVELINFO=DATA=INFO-0-1&&NAMEPLAT=EQUIPW&&TI=0&&VAL1=16&&VAL2=17&&21

merci pour support et suggestion.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
18 août 2019 à 19:12
Sans avoir essayé quoique ce soit, ces lignes commencent par INFOP-, pas par INFO-
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
18 août 2019 à 19:16
Et t'as pas échappé tous les \ donc ils doivent-être interprétés autrement pour la string de JAVA
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
18 août 2019 à 19:21
Une fois testé, il te manque 2 lignes pour la 2eme capture de Val2, et
.*
capture le premier chiffres, il faut donc soit lui dire qu'il y a 2 chiffres (est-ce vrai?) soit lui dire "tout sauf un chiffre".
Sans l'échappement pour Java
(?<info>INFOP-\d{1,3}-\d{1,2})\s+(?<namePlat>\w+)\s+(?:\w+\s+){3}(?<ti>\d+)\s+(?<val1>\d+).*\n.*\n.*\n\D+(?<val21>\d+).*\n.*\n.*\n.*\n\D+(?<val22>\d+)


http://regexstorm.net/tester?p=%28%3f%3cinfo%3eINFOP-%5cd%7b1%2c3%7d-%5cd%7b1%2c2%7d%29%5cs%2b%28%3f%3cnamePlat%3e%5cw%2b%29%5cs%2b%28%3f%3a%5cw%2b%5cs%2b%29%7b3%7d%28%3f%3cti%3e%5cd%2b%29%5cs%2b%28%3f%3cval1%3e%5cd%2b%29.*%5cn.*%5cn.*%5cn%5cD%2b%28%3f%3cval21%3e%5cd%2b%29.*%5cn.*%5cn.*%5cn.*%5cn%5cD%2b%28%3f%3cval22%3e%5cd%2b%29&i=DATA++++++++++++++NAMEPLAT++++++GR++++NI++++++SI+++++++TI+++++++VAL1+++++WC%0d%0aINFOP-0-0+++++++++EQUIPW+++++++ONE++++0++++++++NC+++++++0+++++++++10%0d%0a%0d%0a++++++++++++++++++PL++++++++++VER2+++++++VER++++++++++++++++++++VAL2%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++11%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++12%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++13%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++14%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++15%0d%0a%0d%0aDATA++++++++++++++NAMEPLAT++++++GR++++NI++++++SI+++++++TI+++++++VAL1+++++WC%0d%0aINFOP-0-1+++++++++EQUIPW+++++++ONE++++0++++++++NC+++++++0+++++++++16%0d%0a%0d%0a++++++++++++++++++PL++++++++++VER2+++++++VER++++++++++++++++++++VAL2%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++17%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++18%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++19%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++20%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++21

0
salut Whismeril:

merci beacoup ca marche bien .

j'ai une autre question :

on reste avec l’exemple précédent si la valeur de VER n'est pas vide

l'expression régulière me donne la valeur de VER qui est ( 123)

(?<val1>\d+).*\n.*\n.*\n\D+(?<val21>\d+).*\n.*\n.*\n.*\n\D+(?<val22>\d+)


mais je cherche à avoir 11 .avec ( D+(?<val21>\d+)) .



DATA              NAMEPLAT      GR    NI      SI       TI       VAL1     WC
INFOP-0-0         EQUIPW       ONE    0        NC       0         10

                  PL          VER2          VER                  VAL2
                                            123                  11
                                                                 12
                                                                 13
                                                                 14
                                                                 15



merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
23 août 2019 à 08:28
Bonjour

à chaque fois que je t'ai répondu, je t'ai mis un lien vers un site de test de regex en ligne.
http://regexstorm.net/tester?p=%28%3f%3cinfo%3eINFOP-%5cd%7b1%2c3%7d-%5cd%7b1%2c2%7d%29%5cs%2b%28%3f%3cnamePlat%3e%5cw%2b%29%5cs%2b%28%3f%3a%5cw%2b%5cs%2b%29%7b3%7d%28%3f%3cti%3e%5cd%2b%29%5cs%2b%28%3f%3cval1%3e%5cd%2b%29.*%5cn.*%5cn.*%5cn.*%3f%28%3f%3cval21%3e%5cd%2b%29%5cr%3f%5cn.*%5cn.*%5cn.*%5cn%5cD%2b%28%3f%3cval22%3e%5cd%2b%29&i=INFOP-0-0+++++++++EQUIPW+++++++ONE++++0++++++++NC+++++++0+++++++++10%0d%0a%0d%0a++++++++++++++++++PL++++++++++VER2++++++++++VER++++++++++++++++++VAL2%0d%0a++++++++++++++++++++++++++++++++++++++++++++123++++++++++++++++++19%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++12%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++13%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++14%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++15%0d%0aINFOP-0-0+++++++++EQUIPW+++++++ONE++++0++++++++NC+++++++0+++++++++10%0d%0a%0d%0a++++++++++++++++++PL++++++++++VER2++++++++++VER++++++++++++++++++VAL2%0d%0a++++++++++++++++++123+++++++++++++++++++++++123++++++++++++++++++11%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++12%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++13%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++14%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++15%0d%0aINFOP-0-0+++++++++EQUIPW+++++++ONE++++0++++++++NC+++++++0+++++++++10%0d%0a%0d%0a++++++++++++++++++PL++++++++++VER2++++++++++VER++++++++++++++++++VAL2%0d%0a++++++++++++++++++123+++++++++123+++++++++++123++++++++++++++++++11%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++12%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++13%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++14%0d%0a+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++15

Si tu y avait été faire un tour tu aurais vu que tu peux taper ton texte, essayer ta regex, la modifier, voir tout ce qui se passe en direct. En plus dans la page "Reference", il y a une description de chaque instruction et un exemple d'application.

Bref de quoi essayer un peu par toi même.
Je veux bien t'aider, mais me redonner exactement ce que je t'ai donné montre que t'as pas beaucoup chercher.

Alors là au moins, je vais t'obliger à utiliser le lien.
0
salut Whismeril:

je vous remercie pour le support apporter .

mais vous avez mal juger la situation , j'ai effectué plusieurs tentative c'est pour cette raison j'ai sollicité votre aide .

toute les combinaisons faite sur http://regexstorm.net/tester ,depuis trois jours non pas donné de résultat, je suis entrain d'apprendre l'utilisation de regx avec vous enfin tout le monde dans ce forum et j'ai appris beaucoup de chose .

j'avez pas compris l'utilisation de \D+ et je voulais la changer avec :

+"(\\w+\\s+){3}\\s+\\d+(?<val21>\\d{1,3}+).*+\\d+(?<val22>\\d{1,3}+)";


pas de bonne résultat.

Nb: je dois avouer que j'ai mal posé la question , j'ai pas voulu changer votre code seulement.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
23 août 2019 à 17:54
Et donc la dernière regex que je t’ai proposé te convient elle?
0
salut:

je bloque toujours quand fusionne cette regx et \D+ :

votre code est :

(?<val1>\d+).*\n.*\n.*\n\D+(?<val21>\d+).*\n.*\n.*\n.*\n\D+(?<val22>\d+)


après changement:

+"(?<val1>\d+).*\n.*\n.*\n\(w+\s+){3}\s+\D+(?<val21>\d{1,3}+).*+\D+(?<val22>\d{1,3}+)";


rien n'est affiché quand je compile et sur http://regexstorm.net/tester aussi .

je bloque ici :
 (\w+\s+){3}\s+\D+(?<val21>\d{1,3}+) 
.

NB: \D+ : n'importe quel caractère qui n'est pas un chiffre alors je veux récupérer un chiffre.

merci pour votre compréhension.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
23 août 2019 à 19:41
Je ne comprends pas
0
salut:

votre code quand je l'applique sur mon texte ,la premiere valeur de val21 est 123 , je veux avoir le numero 11.

(?<val1>\d+).*\n.*\n.*\n\D+(?<val21>\d+).*\n.*\n.*\n.*\n\D+(?<val22>\d+)



DATA NAMEPLAT GR NI SI TI VAL1 WC
INFOP-0-0 EQUIPW ONE 0 NC 0 10

PL VER2 VER VAL2
123 11
12
13
14
15



mon code ne marche plus :

+"(?<val1>\d+).*\n.*\n.*\n\(w+\s+){3}\s+\D+(?<val21>\d{1,3}+).*\n.*\n.*\n.*\n+\D+(?<val22>\d{1,3}+)";


merci
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
23 août 2019 à 19:58
Au message 26, je t'ai mis un lien, es tu allé voir?
0
salut :

je dois stopper ici , merci beaucoup.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
24 août 2019 à 00:50
C'est pathétique.

Je te dis que tes messages ne donnent pas l'impression que tu essayes de ton coté.
Si ce n'est pas le cas, je ne demande qu'à te croire.

Mais au lieu de défendre ta bonne foie, tu te vexes, alors tu ne voies même pas que j'ai quand même répondu à
la premiere valeur de val21 est 123 , je veux avoir le numero 11.
. S'en suit un dialogue de sourd puisque moi, je pense que t'ai allé voir le lien où il y a une regex qui ne prend pas 123 (ou un autre nombre) s'il est sous PL et/ou VER2 et/ou VER, mais seulement s'il est à la fin de la ligne.
Et quand je comprends et que je te signale que tu as une solution depuis 11heures et 6 messages, tu réponds qu'on va en rester là.....


Pas de problème.

Bonne soirée.

0
Pourquoi cette agressivité et arrière pensé moyen âge !!!!!!!!!!!!!!!!!!!!
J’ai répondu que je dois arrêter ici parce que je vous ai envoyé quartes message et tu n'as rien compris.
Si tu acceptes d'aider les gens il faut être poli et patient.
Vous avez dépassé la limite.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
24 août 2019 à 15:33
Donc tu n'es toujours pas allé voir la regex du message 26....
0
Rejoignez-nous