[R] Problème de remplissage array

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

[R] Problème de remplissage array

#1

Message par Hugues »

Bonjour,

Je voudrais tracer une courbe avec des données contenues dans un fichier sur 2 colonnes (séparée par un ";").

J'arrive à décortiquer le fichier grâce à la fonction "_StringToArray2D".
Voici le contenu de mon fichier:
► Afficher le texte
Pour faire simple, je veux récupérer les données 'mm' et 'KN' pour faire une courbe (mm étant abscisses, et KN ordonnées) avec GDI...

Ci joint mon code sans la partie GDI puisque je n'arrive pas à récuperer les données...

Merci par avance pour votre aide.

Code : Tout sélectionner

[spoiler=]
#Include <File.au3>
#Include <Array.au3>
#Include <ArrayEx.au3>

$File = FileRead("Fichier.3")
Global $CountLines = _FileCountLines("Fichier.3")
Global $aArrayTempValue, $ligne, $aResult, $StartLine
$aString = _StringToArray2D($File, @CRLF, ";", 1)

$ChaineRecherchee = "'mm'"
$aResult = _ArrayFindAll($aString, $ChaineRecherchee)

$StartLine = $aResult[0] + 1            ;J'incrémente de 1 pour partir sur la bonne ligne....

$TotalLine = $CountLines - $aResult[0]  ;Je détermine le nombre de ligne pour ma courbe en excluant les lignes < à la ligne $aResult...
Local $aPoints[$TotalLine][2]           ;Je dimensionne mon tableau en fonction des valeurs trouvées...

For $h = $StartLine To UBound($CountLines)
    $aPoints[$h][0] = $aString[$h][0]
    $aPoints[$h][1] = $aString[$h][1]
Next

_arraydisplay($aPoints) ;MAIS MON TABLEAU EST VIDE....[/spoiler]
Modifié en dernier par Hugues le ven. 13 sept. 2013 08:57, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplissage array

#2

Message par mikell »

Code : Tout sélectionner

#Include <Array.au3>

$file = FileRead("test.txt")
$res = StringRegExp($file, '([\d.]+;\h*[\d.]+)', 3)
Global $array[UBound($res)][2]
For $i = 0 to UBound($res)-1
  $split = StringSplit($res[$i], "; ", 3)
  $array[$i][0] = $split[0]
  $array[$i][1] = $split[1]
Next
_ArrayDisplay($array)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
alex1205
Niveau 5
Niveau 5
Messages : 123
Enregistré le : dim. 07 mars 2010 13:59
Status : Hors ligne

Re: [..] Problème de remplissage array

#3

Message par alex1205 »

Salut Hugues,

Voilà un script que j'ai fait à l'arrache :

Code : Tout sélectionner

$File = FileRead("Nouveau document texte.txt")
;~ MsgBox(0, "", $File)
$array = StringRegExp($File, "\d.\d{2}; \d.\d{2}", 3)
;~ _ArrayDisplay($array)
Dim $aResult[999][999]
For $i = 0 To UBound($array) - 1
    $aResult[$i][0] = _ArrayGetString(StringRegExp($array[$i], "\d.\d{2}", 3), 0)
    $aResult[$i][1] = _ArrayGetString(StringRegExp($array[$i], "\d.\d{2}", 3), 1)
Next
;~ Redim $aResult[35][2]
_ArrayDisplay($aResult)

Func _ArrayGetString($array, $i)
    Return $array[$i]
EndFunc   ;==>_ArrayGetString
C'est la première fois que j'utilise les regex et c'était un désastre :D Normalement ça doit marcher. (alors il est bien mon regex? :P)
Alex1205

EDIT : Ah bah mince j'ai pas vu la réponse de mikell, je suis déçu :P j'ai cru être le premier !
Le "je ne sais pas" et "j'y arrive pas" n'existe dans mon vocabulaire. Toutes Questions ont une réponse, cherchez et vous la trouverai. Utilisez Recherche du forum et vous verrez. Si [blink]Aucune[/blink] question ne tient à votre problème, créez un sujet.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Problème de remplissage array

#4

Message par GaRydelaMer »

Bonjour

je t'ai presque tout mis sous forme de fonction se sera plus simple pour implémenter ta couche GDI.
► Afficher le texte
@Mikell tu y étais presque pourquoi avec ta regexp tu captures pas les 2 valeurs d'un coup ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplissage array

#5

Message par mikell »

alex1205 a écrit :alors il est bien mon regex?
Il faut anticiper qu'une ligne en fin de fichier peut éventuellement être

Code : Tout sélectionner

1.01; 12.65
et dans ce cas ton regex ne marchera plus :P

@gary
par timidité probablement :mrgreen:
En fait c'est ce que j'avais fait d'abord, et puis j'ai choisi l'option du tri des lignes pour la sécurité et une meilleure compréhension du code (il y a pas mal de solutions regex possibles pour traiter ce fichier)
Et pas besoin d'échapper le point dans un set :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
alex1205
Niveau 5
Niveau 5
Messages : 123
Enregistré le : dim. 07 mars 2010 13:59
Status : Hors ligne

Re: [..] Problème de remplissage array

#6

Message par alex1205 »

@Mikell : en fait j'avais fait deux scripts, le premier c'est celui que j'ai donné et le deuxième fonctionnait :

Code : Tout sélectionner

#include <Array.au3>
$File = FileRead("Nouveau document texte.txt")
Dim $aResult[999][999]
$aEveryLine = StringSplit($File, @CRLF)

For $i = 1 To $aEveryLine[0]
    If UBound(StringSplit($aEveryLine[$i], ";")) = 3 Then
        $aResult[$i][0] = 2
        $aResult[$i][1] = _ArrayGetString(StringSplit($aEveryLine[$i], ";"), 1)
        $aResult[$i][2] = _ArrayGetString(StringSplit($aEveryLine[$i], ";"), 2)
    EndIf
Next
_ArrayDisplay($aResult)
Func _ArrayGetString($array, $i)
    Return $array[$i]
EndFunc   ;==>_ArrayGetString
Ca aurait marché ?
Le "je ne sais pas" et "j'y arrive pas" n'existe dans mon vocabulaire. Toutes Questions ont une réponse, cherchez et vous la trouverai. Utilisez Recherche du forum et vous verrez. Si [blink]Aucune[/blink] question ne tient à votre problème, créez un sujet.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplissage array

#7

Message par mikell »

Pas top...
- tu récupères la ligne 'mm';'kN' (indésirable)
- ton array démarre à l'index 11 et une ligne/2 est vide
- la colonne 0 est inutile (voir dans l'aide les flags pour StringSplit)
- tu ne redimensionnes pas ton array en fin de traitement
- pour la 2ème valeur, tu récupères aussi l'espace qui est avant la valeur (utiliser StringStripWS, ou mettre "; " comme délimiteur dans StringSplit)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
alex1205
Niveau 5
Niveau 5
Messages : 123
Enregistré le : dim. 07 mars 2010 13:59
Status : Hors ligne

Re: [..] Problème de remplissage array

#8

Message par alex1205 »

Ah... au moins j'ai essayé :D
J'en aurais au moins tiré une leçon

Alex1205
Le "je ne sais pas" et "j'y arrive pas" n'existe dans mon vocabulaire. Toutes Questions ont une réponse, cherchez et vous la trouverai. Utilisez Recherche du forum et vous verrez. Si [blink]Aucune[/blink] question ne tient à votre problème, créez un sujet.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Problème de remplissage array

#9

Message par GaRydelaMer »

@Mikell, toi timide je le note pour plus tard....
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Problème de remplissage array

#10

Message par Hugues »

Merci à tous de vous êtes penchés sur mon problème :mrgreen:

La solution de GaRydelaMer me plait bien! Je l'essai de suite
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Problème de remplissage array

#11

Message par jguinch »

Salut.
J'arrive après la guerre (encore).
Je voulais proposer un code qui permettrait de gérer les nombres entiers/décimaux et positifs/négatifs... car on ne sait pas si les valeurs mm et kN seront toujours au même format...
Il y a certainement plus propre, mais l'idée est là.
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Problème de remplissage array

#12

Message par Hugues »

Salut jguinch,

C'est pas grave d'arriver après la guerre! :lol: Ça me convient parfaitement!

Maintenant faut que je traite tout ca avec GDI et là c'est le drame... :mrgreen:
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Problème de remplissage array

#13

Message par jguinch »

Tu es obligé de passer par GDI ? Tu ne peux pas utiliser les fonctions graphiques de base (GUICtrlCreateGraphic) ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Problème de remplissage array

#14

Message par Hugues »

Justement je sais pas... Mes connaissances étant très limitées, je ne sais pas vers quoi me tourner...
Ce qui m’intéresse c'est une solution simple et efficace :mrgreen:

Mikell m'a fait une superbe programme http://www.autoitscript.fr/forum/viewto ... =3&t=11244 sur un autre sujet.

J'essaie de m'en inspirer bien qu'ici ma courbe sera fixe.

Donc pour gagner du temps et que chacun puisse m'orienter voici ce que j'aimerai faire:
-Lire les données pour tracer ma courbe -> Ok
-Définir les échelles de mes axes X et Y,
-Tracer ma courbe,
-Récupérer les valeurs de chaque point via un "mouseover" sur la courbe...

J'ai encore gros gros de boulot...
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplissage array

#15

Message par mikell »

Simple et efficace = GUICtrlCreateGraphic
Le plus tordu c'est le calcul des échelles et le fait que les valeurs "y" s'inversent dans le tracé de la courbe
Sinon pour le mouseover on peut faire comme ça par exemple
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Problème de remplissage array

#16

Message par Hugues »

Merci Mikell, :mrgreen:

Mais je dois être vraiment bête car je n'arrive pas à combiner ces deux bouts de code...
Le premier me donne parfaitement mes coordonnées x et y pour ma courbe, et la seconde de Mikell pour tracer... mais je n'y arrive pas... :oops: :evil:
► Afficher le texte
Et le code de Mikell
► Afficher le texte
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplissage array

#17

Message par mikell »

Franchement tu exagères :mrgreen: c'est quasiment le même truc que le code d'autrefois
M'enfin bon voilà l'idée, sans la mise à l'échelle qui demande quelques règles de 3, faire des coeffs etc j'ai la flemme
ça utilise ton fichier du post n°1
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Problème de remplissage array

#18

Message par Hugues »

Merci,

Je suis grave perdu dans tout ce codage lol, ce qui est bizarre pour les mini maxi, c'est que ça m'affiche pas les bonnes valeurs?

Dans mon fichier, le mini_x = 0 et maxi_x = 7.25 et mini_y = 0.89 et maxi_y = 18.86 et la fonction me trouve mini_x = 0 et maxi_x = 7.00 et mini_y = 0.89 et maxi_y = 18.00... :shock:

J'ai aussi essayé avec ce code que Mikell m'avait déja donné :oops: et ca me donne pareil
► Afficher le texte
? Ca doit-etre encor un truc bête... :oops:
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplissage array

#19

Message par mikell »

Tu le posterais pas ce nouveau fichier ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Hugues
Niveau 8
Niveau 8
Messages : 597
Enregistré le : ven. 21 sept. 2012 18:12
Status : Hors ligne

Re: [..] Problème de remplissage array

#20

Message par Hugues »

Je suis vraiment désolé d'être bon à rien... :oops: :oops:
Voici mon fichier:http://cjoint.com/?CHAumk8sxcA
Répondre