[..] Demande de création d'un traitement sur du texte

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
michel2295
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mer. 06 janv. 2010 16:32
Localisation : val d'oise bretagne
Status : Hors ligne

[..] Demande de création d'un traitement sur du texte

#1

Message par michel2295 »

bonjour j'ai été utilisateur de la v2 je suis perdu en v3

voici mon probleme assez urgent c'est un programme d'usinage sur machine commande numérique en 5 axes
ce programme usine une pale de réacteur et avec la modif je peut faire une répétition

j'ai un fichier tmp.txt contenant ceci

(DESSUS_T2 5X Ebauche Niveau 1_2)
N37 G0C-79.519B-65.
G151S1
N38 G0X453.129Y69.137 M3
N39 G0Z177.107 M8
N42 G0X453.129Y69.137
N43 G0Z177.107
N44 G1X453.98Y64.535Z175.349 FL18
N45 X453.744Y64.742Z174.496 FL19
N46 X453.508Y64.949Z173.643
N74 X449.076Y69.072Z156.821
N75 X448.446Y68.936Z156.698
N76 X447.979Y68.814Z156.599
N77 X447.506Y68.732Z156.516C-79.474B-65.
N78 X446.881Y68.596Z156.395C-79.414B-65.
N79 X446.102Y68.426Z156.246C-79.338B-65.


je voudrais ceci dans tmp.new par exemple

(DESSUS_T2 5X Ebauche Niveau 1_2)
L101=-79.519+L100
N37 G0CL101B-65.
G151S1
N38 G0X453.129Y69.137 M3
N39 G0Z177.107 M8
N42 G0X453.129Y69.137
N43 G0Z177.107
N44 G1X453.98Y64.535Z175.349 FL18
N45 X453.744Y64.742Z174.496 FL19
N46 X453.508Y64.949Z173.643
N74 X449.076Y69.072Z156.821
N75 X448.446Y68.936Z156.698
N76 X447.979Y68.814Z156.599
L101=-79.474+L100
N77 X447.506Y68.732Z156.516CL101B-65.
L101=-79.414+L100
N78 X446.881Y68.596Z156.395CL101B-65.
L101=-79.338+L100
N79 X446.102Y68.426Z156.246CL101B-65.

il faut chercher C prendre le numérique qui suit
ecrire sur la ligne d'avant
L101=.....+L100 ... est le numérique trouvé
ensuite reécrire la ligne en remplaçant le numérique par L101
ceci jusqu'a la fin du fichier

merci pour votre réponse
Avatar du membre
ayuckers
Niveau 4
Niveau 4
Messages : 77
Enregistré le : mer. 28 oct. 2009 14:15
Localisation : Drome
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#2

Message par ayuckers »

Bonsoir, michel2295

Voici votre script, il vous suffiera de modifier les 2 chemin d'acces au debut du script.
j'espere ne pas avoir fait trop compliqué
dite mois si cela vous convient :)
► Afficher le texte
edit : Oups Sorry voila c'est fait
Modifié en dernier par ayuckers le mar. 19 janv. 2010 21:47, modifié 1 fois.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#3

Message par timmalos »

Merci d'editer mon message pour inserer les balises

Code : Tout sélectionner

 sur la partie de votre message le necessitant.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#4

Message par Tlem »

@ayuckers
Aux vues de la question, je ne suis pas sure que la valeur numérique soit toujours négative, et que la première lettre qui suit soit la lettre B.
Si la ligne N°2 ressemble à ceci :

Code : Tout sélectionner

N37 G0C27.519A-65.
votre code ne fonctionne plus.

Il faudrait donc que michel2295 confirme la structure constante du fichier, ou alors modifier le traitement pour prendre en compte les autres possibilités.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#5

Message par Tlem »

Voilà comment je verrais le traitement de la ligne. ;)
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
michel2295
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mer. 06 janv. 2010 16:32
Localisation : val d'oise bretagne
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#6

Message par michel2295 »

bonjour et merci beaucoup
ça fonctionne nickell j'ai fait la modif car c n'est pas toujours positif

pour parfaire le prog il faudrait mettre le fichier d'entrée en variable poser la question
et pour le fichier de sortie récupérer le nom de fichier sans l'extension et mettre new automatiquement
et pour récupérer le C prendre en avançant caractere par caractere tant que l'on trouve un numérique comme ça ça fonctionne meme si il n'y a pas de B normalement on ne trouve que B ou fin de ligne et ça doit etre un numérique

encore merci


ayuckers a écrit :Bonsoir, michel2295

Voici votre script, il vous suffiera de modifier les 2 chemin d'acces au debut du script.
j'espere ne pas avoir fait trop compliqué
dite mois si cela vous convient :)
► Afficher le texte
edit : Oups Sorry voila c'est fait
Avatar du membre
michel2295
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mer. 06 janv. 2010 16:32
Localisation : val d'oise bretagne
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#7

Message par michel2295 »

bonjour vous avez raison il faut chercher C et un numérique et si il n'y a pas de numérique on écrit tel quel la ligne car C peut se trouver dans un commentaires
j'ai essayé d'intégrer ces lignes dans le prog a ayuckers qui fonctionne avec C- et B
je n'ai pas réussi la 1ligne fonctionne ensuite il ne prend plus le C
Tlem a écrit :Voilà comment je verrais le traitement de la ligne. ;)
► Afficher le texte
Avatar du membre
ayuckers
Niveau 4
Niveau 4
Messages : 77
Enregistré le : mer. 28 oct. 2009 14:15
Localisation : Drome
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#8

Message par ayuckers »

Voila j'ai apporter les modification :
- j'ai integré la solution de Tlem qui est effectivement tres pratique :)
pour que cette methode fonctionne il faut gérer l'offset
Comme la fonction "StringInStr" retourne dans notre cas la position de "C" dans
la chaine de caracter, la valeur retourné par cette fonction correspond donc a notre Offset
- j'ai rajouté une boite de dialogue pour rechercher le fichier TXT
-le fichier Modifier sera donc crée avec l'extension "New" au meme endroit que le fichier Text
► Afficher le texte
par contre je ne maitrise pas du tout la fonction "StringRegExp" et je n'ai pas encore réelement
compris comment Tlem a fait cela... :shock:
Mais il reste tout de meme un petit probleme.... je cherche encore mais si Tlem a une Idée pour suprimé les "-"
apres modification de la ligne
EDIT : j'ai bricoler une solution ... sa devrais fonctionner, je l'ai integré au code
voici la ligne pour supprimer le caractere "-" juste apres le "C" quand une ligne est modifier
► Afficher le texte
je ne sait pas si il y a plus simple

Normalement le Script est Fonctionnel, reste plus qu'a tester :)
Avatar du membre
michel2295
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mer. 06 janv. 2010 16:32
Localisation : val d'oise bretagne
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#9

Message par michel2295 »

bonjour et encore merci

je viens d'essayer tres bien

il fonctionne même si on a rien ou un tout autre caractere derriere ou C positif sans le -

j'ai rajouté
; si le fichier n'existe pas il est supprimé et crée automatiquement
if FileExists ( $Dest ) then
FileDelete ( $Dest )
endif

j'ai modifié
If StringMid($Line, $Cposition + 1, 1) = '-' Then $aNb[0] = '-' & $aNb[0]
il y avait la $C j'ai mis $Cposition $C n'existe plus

$line = StringMid($line, 1, StringInStr($line, "C")) & StringMid($line,StringInStr($line, "C")+1,StringLen($line) )
et j'ai mis +1 au lieu de+2 car il me "bouffait le L"

il se plante si il y a un C et pas de valeur numérique dans un commentaire par exemple

voici un fichier pour tester

(DESSUS_T2 5axes Ebauche Niveau 4_5)
N35 G151 S1
N37 G0C-80.54B-58.963
N42 G0X448.492Y45.897
N45 X456.237Y-0.589Z129.777
N47 X456.097Y-0.711Z129.862
N48 X455.417Y-0.753Z129.547C-80.457
N49 X455.19Y-0.767Z129.442C-80.428 B-58.731
N50 X454.398Y-0.848Z129.061C-80.329 A-58.525
N51 X453.606Y-0.928Z128.681C-80.229B-58.319
N52 X452.712Y-1.012Z128.255C-80.115
N56 X450.192Y-1.233Z127.066C-79.793B-57.435
N232 X307.802Y-1.832Z96.212C68.062B-25.441
N36 ( C tout seul pour tester)
N234 X302.969Y9.939Z123.381

merci j'éssaie un de comprendre la v3 je n'avais fait que quelques prog simple en v2

encore merci car j'ai deja traité mes fichiers avec la premiere version
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#10

Message par timmalos »

Michel, Utilisez la balise

Code : Tout sélectionner

 pour tous vos codes, et EDITEZ vos messages.

Dans le cas contraire, ce sujet sera supprimé.
Avatar du membre
michel2295
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mer. 06 janv. 2010 16:32
Localisation : val d'oise bretagne
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#11

Message par michel2295 »

excusez moi je n'avais pas compris balise

Code : Tout sélectionner

  
je pense qu'il suffit de mettre [code] et d'ecrire normalement ensuite 
mais je vais essayer la prochaine fois

 merci du conseil
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#12

Message par Tlem »

Pour l'utilisation des balises, voyez ceci : http://www.autoitscript.fr/forum/viewto ... 896#p24896

Évitez aussi les citations qui sont inutiles.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#13

Message par Tlem »

@ayuckers
La coloration syntaxique du code est réservée aux forums : Pour répondre à votre question (http://www.autoitscript.fr/forum/viewto ... 643#p27643), StringRegExp() permet de rechercher et de renvoyer une information selon 'un masque de donnée' définit. Cela fait appel aux expressions régulières (Expression rationnelle en Français ;)).
C'est un outil super puissant lorsqu'on le maitrise très bien, mais si comme moi vous bricolez, alors ce n'est pas toujours évident de trouver le bon Pattern. ;)

Pour en revenir au code de michel2295, je verrais bien une autre solution pour trouver la chaine et faire le traitement sans risque d'erreur.

A première vue d'après les éléments donnés, la chaine à traiter serait de la forme :

Code : Tout sélectionner

X00 X0C-00.000X-00.000
Ou sans le signe négatif
X00 X0C00.000X00.000
J'ai remplacé les lettres qui ne sont pas un point de référence par la lettre générique X et les nombres par le 0.

Donc, fort de cela, on peut donc considérer que si dans la chaine je trouve :

Code : Tout sélectionner

X0C-00.000
ou
X0C00.000
alors j'ai bien la chaine à traiter.

Nous allons donc utiliser encore une fois les expressions régulières pour tester la chaine.
Si je ne dit pas de connerie, en référence à l'aide de la fonction StringRegExp() alors nous auront :
Un caractère non numérique (\D) + un caractère numérique (\d) + la lettre C + le signe négatif (mais pas tout le temps) + 2 ou 3 caractères numériques (\d{2,3}) + un point + 2 ou 3 caractères numériques (\d{2,3}).

Ce qui nous amène (à cause du signe négatif) à deux Pattern possibles :

Code : Tout sélectionner

(\D\dC-\d{1,3}.\d{1,3})
Ou
(\D\dC\d{1,3}.\d{1,3})
Il suffit donc d'utiliser la validation par expression régulière au lieu de chercher la lettre C dans la ligne.
En adaptant le code que j'avais donné précédemment, cela donne :

Code : Tout sélectionner

$Line = 'N37 G0C-27.519B-65.'

If (StringRegExp($Line, '(\D\dC-\d{2,3}.\d{2,3})', 0) Or StringRegExp($Line, '(\D\dC\d{2,3}.\d{2,3})', 0)) Then
    $C = StringInStr($Line, 'C')
    $aNb = StringRegExp($Line, '(\d{2,3}.\d{2,3})', 1)
    MsgBox(0, '', $aNb[0])
    If StringMid($Line, $C + 1, 1) = '-' Then $aNb[0] = '-' & $aNb[0]

    $Line = 'L101=' & $aNb[0] & '+L100' & @CRLF & _
    StringReplace($Line, $aNb[0], 'L101')
EndIf

MsgBox(0, '', $line)
Ce code, permet donc de valider et de traiter tout les cas de ce type :

Code : Tout sélectionner

N37 G0C-27.519B-65.
N37 G0C27.519B-65.
N37 G0C-270.51B-65.
N37 G0C270.51B-65.
N37 H1C-27.519C-65.00
N37 H1C27.519C-65.00
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
michel2295
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mer. 06 janv. 2010 16:32
Localisation : val d'oise bretagne
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#14

Message par michel2295 »

bonsoir et merci Tlem
je pense que StringRegExp ne convient pas
il faut chercher C et faire une boucle avancer d'un caractere et tester si +-.0123456789
voici ce que l'on doit traiter merci d'avance

Code : Tout sélectionner

 
N56 C1
N 5 C1.1B6
N56 C-1
N 5 C-1.1B6
N56 C0.333A66
N 5 C1.1B6
N56 C-1
N 5 C-1.1B6
 
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#15

Message par Tlem »

Effectivement, vous introduisez des valeurs qui ne rentre pas dans le cadre de cette recherche :

Code : Tout sélectionner

N56 C1
et
N56 C-1
Toutefois, l'expression régulière me semble quand même la meilleur solution dans votre cas puisque vous donnez un panel de valeurs très différentes et à moins de tester caractère par caractère, je ne vois pas comment faire autrement.

Voici donc une nouvelle version du 'testeur de ligne' ;) qui passe toutes les valeurs que vous avez indiqué (sauf l'exemple du début puisque les nouvelles valeurs sont différentes par l'espace avant le C :roll: ).
La base de la recherche est restreinte, mais correspond à un numérique + un espace + la lettre C + éventuellement le signe - + un numérique.
Ce qui limite quand même la recherche aux lignes de recherche et non aux lignes de commentaires.
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
michel2295
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mer. 06 janv. 2010 16:32
Localisation : val d'oise bretagne
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#16

Message par michel2295 »

ça fonctionne super bien avec un blanc devant C pour parfaire et eviter ce cas il faudrait une fonction directe pour mettre un blanc devant C avant de passer au traitement
voici le code complet [blink]#include <file.au3>
#include <String.au3>
#include <Array.au3>

; declaration des variable
; ouverture d'une boite de dialogue pour recherche le fichier text
Global $Source = FileOpenDialog("Machine", @WindowsDir & "\", "Text (*.*)", 1 )
Global $Dest
Global $Cpt, $Cvar, $NumVar, $C, $Cposition
Global $DecomposeChemin, $DecomposeNom

; calcule le nombre de ligne contenu dans le fichier
Global $CountLines = _FileCountLines($Source)

; decomposition du chemin d'acces puis du nom
$DecomposeChemin = StringSplit($Source, '\', 1)
$DecomposeNom = StringSplit($DecomposeChemin[$DecomposeChemin[0]], '.', 1)
$DecomposeNom[2] = "new" ; ici choix de l'extention
;recomposition du chemin d'acces avec la nouvelle extention
$DecomposeChemin[$DecomposeChemin[0]] = _ArrayToString($DecomposeNom,".",1)
$Dest = _ArrayToString($DecomposeChemin,"\",1)

; ouverture des fichier 0 = lecture, 1 = ecriture
$FileSource = FileOpen($Source, 0)
; si le fichier n'existe pas il est supprimé et crée automatiquement
if FileExists ( $Dest ) then
FileDelete ( $Dest )
endif
$FileNew = FileOpen($Dest, 1)

; verrification de securité
If ($FileSource = -1) OR ($FileNew = -1) Then
MsgBox(0, "Erreur", "Probleme ouverture fichier")
Exit ; si erreur le script est arreter fin du programme
EndIf

; ecriture de la 1er ligne dans le Nouveau fichier
$line = FileReadLine($Source,1)
FileWriteLine($FileNew, $line)

; ici j'ai mis 2 pour commencer a la 2eme ligne du fichier
For $Cpt = 2 To $CountLines

$line = FileReadLine($Source,$Cpt)
If @error = -1 Then ExitLoop

$Cposition = StringInStr($line, "C")
; si il n'y a pas de C dans la ligne on la copie tel quel
If $Cposition = 0 Then

FileWriteLine($FileNew, $line) ; ecriture de la ligne dans le fichier

; si il y a un C dans la ligne alors un fait quelque modif
ElseIf $Cposition > 0 Then

;*************************
If (StringRegExp($Line, '(\d C-\d{1,3})', 0) Or StringRegExp($Line, '(\d C\d{1,3})', 0)) Then
Local $Res
$aNb = StringSplit($Line, " C", 1)
$Res = $aNb[2]

If StringRegExp($Res, '([a-zA-Z])', 0) Then
$aNb = StringRegExp($Res, '([a-zA-Z])', 1)
$aNb = StringSplit($Res, $aNb[0], 1)
$Res = $aNb[1]
EndIf

$Line = 'L101=' & $Res & '+L100' & @CRLF & _
StringReplace($Line, $Res, 'L101')
EndIf

;MsgBox(0, 'End', $line)
FileWriteLine($FileNew,$Line)

EndIf

Next

MsgBox(0,"Convert", "Fini")
; fermeture des fichier ouvert
FileClose($FileSource)
FileClose($FileNew)[/blink]
Avatar du membre
michel2295
Niveau 1
Niveau 1
Messages : 9
Enregistré le : mer. 06 janv. 2010 16:32
Localisation : val d'oise bretagne
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#17

Message par michel2295 »

j'ai mis '[blink][/blink]' pour cacher le code mais ce n'était pas ça
que faut t'il mettre pour mettre 'voir' et donc cacher le code
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#18

Message par pierrotm777 »

Sélection votre code et cliquez sur 'spoiler=" :)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Demande de création d'un traitement sur du texte

#19

Message par Tlem »

J'ai décrit comment utiliser les outils du forum sur ce lien : http://www.autoitscript.fr/forum/viewto ... 896#p24896

Pensez à rajouter les balises de code. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre