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

Signaler
Messages postés
29
Date d'inscription
jeudi 6 janvier 2011
Statut
Membre
Dernière intervention
4 août 2019
-
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
-
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.
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
420
Sans avoir essayé quoique ce soit, ces lignes commencent par INFOP-, pas par INFO-
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
420
Et t'as pas échappé tous les \ donc ils doivent-être interprétés autrement pour la string de JAVA
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
420
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

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
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
420
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.
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.
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
420
Et donc la dernière regex que je t’ai proposé te convient elle?
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.
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
420
Je ne comprends pas
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
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
420
Au message 26, je t'ai mis un lien, es tu allé voir?
salut :

je dois stopper ici , merci beaucoup.
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
420
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.

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.
Messages postés
14463
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juillet 2020
420
Donc tu n'es toujours pas allé voir la regex du message 26....