[R] Traitement d'un tableau vers un fichier texte

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

[R] Traitement d'un tableau vers un fichier texte

#1

Message par pierrotm777 »

Bonjour,

J'ai un tableau de 4 colonnes comme point de départ (pas un fichier) .
Grace à la commande ci-dessous,

Code : Tout sélectionner

_ArrayDisplay($instruction);visualisation du tableau avec les indications de route
et une fois copié dans le clip board, puis dans un fichier, le tableau est du genre:
► Afficher le texte
Je souhaite ne récupérer que les colonnes 1 et 2.

J'ai bien essayé cela mais j'obtiens une erreur sur la dimension du tableau:
► Afficher le texte
J'aurais besoin d'un fichier final .txt avec les colonnes 1 et 2 seulement .
Modifié en dernier par pierrotm777 le mar. 28 sept. 2010 09:23, modifié 3 fois.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..]Traitement d'un tableau

#2

Message par sylvanie »

je ferai un gros ménage en expression régulière :

Code : Tout sélectionner

$file="tableau.html"

$hnd=FileOpen($file,0)


$contenu=FileRead($file)
$contenu=StringRegExpReplace($contenu,"([^\|]+)\|([^\|]+)\|[^|]+\|[^\|]+\x0D\x0A","$1|$2"&@CRLF)
ConsoleWrite($contenu)
 
avec tableau.html étant votre fichier input
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Traitement d'un tableau

#3

Message par Tlem »

Super rapide l'expression régulière, mais après il faut quand même faire une boucle de lecture du résultat pour créer le tableau.

Deux solutions sans le RegEx :P :

Code : Tout sélectionner

#Include <array.au3>
#Include <File.au3>
Global $aTableauTmp

_FileReadToArray("tableau.html", $aTableauTmp)
Global $aTableau[$aTableauTmp[0]][2]
For $i = 1 to $aTableauTmp[0]
    $LineSplit = StringSplit($aTableauTmp[$i], "|")
    $aTableau[$i - 1][0] = $LineSplit[1]
    $aTableau[$i - 1][1] = $LineSplit[2]
Next
_ArrayDisplay($aTableau)
Mais dans ce cas, on ce retrouve avec une colonne inutile (la N°1).
Donc dans ce cas je préfère la solution N°2 :

Code : Tout sélectionner

#Include <array.au3>
#Include <File.au3>
Global $aTableauTmp

_FileReadToArray("tableau.html", $aTableauTmp)
Global $aTableau = $aTableauTmp

For $i = 1 to UBound($aTableauTmp) - 1
    $LineSplit = StringSplit($aTableauTmp[$i], "|")
    $aTableau[$i] = $LineSplit[2]
Next
_ArrayDisplay($aTableau)
On peut aussi remplacer les deux lignes entre le For/Next par l'utilisation direct du StringRegExpReplace afin d'obtenir seulement la partie deux du tableau que l'on attribue directement au tableau initial, sans passer par un tableau intermédiaire. ;)
Mais bon, pour cet exemple, il faut trouver le bon Pattern. :roll:

Code : Tout sélectionner

#Include <array.au3>
#Include <File.au3>
Global $aTableau

_FileReadToArray("tableau.html", $aTableau)

For $i = 1 to UBound($aTableau) - 1
    $aTableau[$i] = StringRegExpReplace($aTableau[$i], "Le bon Pattern")
Next
_ArrayDisplay($aTableau)
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
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..]Traitement d'un tableau

#4

Message par sylvanie »

Tlem a écrit : Deux solutions sans le RegEx :P
C'est marrant, j'ai toujours l'impression que la joie que dégage l'utilisation des regexp semble proche de la saveur des épinards cuits à l'eau sans sel de la cantoche du Mercredi :lol:
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Traitement d'un tableau

#5

Message par pierrotm777 »

sylvanie a écrit :
Tlem a écrit : Deux solutions sans le RegEx :P
C'est marrant, j'ai toujours l'impression que la joie que dégage l'utilisation des regexp semble proche de la saveur des épinards cuits à l'eau sans sel de la cantoche du Mercredi :lol:
Petit, je détestai ça , mais maintenant , et à la crème , alors là ! :mrgreen:
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Traitement d'un tableau

#6

Message par pierrotm777 »

Mon point de départ est le tableau issu d'une copie clip board de la commande:

Code : Tout sélectionner

_ArrayDisplay($instruction);visualisation du tableau avec les indications de route
Je l'ai juste placé dans un fichier pour que vous puissiez voire sa forme!

Mon tableau est donc déjà dans la variable $instruction !

J'ai oublié de mentionner que mon fichier final doit être un fichier texte.txt (post#1 mis à jour, désolé).
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..]Traitement d'un tableau

#7

Message par sylvanie »

ça ne change pas vraiment la donne finalement, car dans ce cas, repassez par la transformation en fichier text intermédaire (grosse méthode de faignant que je suis :P )

sinon, il faut reconstruire un tableau de dimension 2 et parcourrir l'initial, un peu comme dans les exemples de Tlem.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Traitement d'un tableau

#8

Message par pierrotm777 »

J'ai bien essayé mais sans succé.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Traitement d'un tableau

#9

Message par Tlem »

En ce qui me concerne, le RegExp est plutôt semblable au caviar.
Il ouvre des tas de portes, il est excellent lorsqu'il est bien préparé, mais il reste toujours hors de ma portée. :lol:

@pierrotm777
Votre tableau d'origine contient-il dans l'élément zéro la dimension du tableau ?
La première colonne que vous devez récupérer, correspond bien à la numérotation des lignes par ordre croissant ?
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é".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#10

Message par pierrotm777 »

@Tlem
Pour le nombre d'élément , je ne sais pas.

Pour le première colonne , oui .
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#11

Message par pierrotm777 »

En fait je réalise que mon besoin est juste d'écrire le tableau dans un fichier texte .

J'ai donc essayé cette fonction mais elle me génère une erreur de dimension:

Code : Tout sélectionner

Func _CreateTextList ( );creation d'une liste simple
    Dim $ArrayToText[UBound ( $instruction )]
    $TxtFilePath = @ScriptDir & "\Texte.txt"
    For $_i = 1 To UBound ( $instruction ) -1
        $ArrayToText[$_I] = $instruction[$_i]
    Next
    _FileWriteFromArray ( $TxtFilePath,$ArrayToText, 1 )
EndFunc;fin ajout creation fichier liste
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#12

Message par Tlem »

Hé bien, dans ce cas, lisez avec une boucle la première colonne de votre tableau $instruction et générez votre fichier. :)

Code : Tout sélectionner

; $instruction = Tableau d'origine à quatre colonne et X lignes

Local $FileTmp
For $i = 1 To UBound($instruction) - 1
    $FileTmp &= $FileTmp & $i & "|" & $instruction[$i][1] & @CRLF ; Format du fichier : Index | Instruction
Next

FileWrite("FichierDeSortie.txt", $FileTmp)
Si le format de sortie ne vous convient pas, vous n'avez qu'à adapter. ;)
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é".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#13

Message par pierrotm777 »

Merci de votre aide, mais jobtiens une erreur , error allocating memory'.

Une idée ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#14

Message par Tlem »

Cela fait suffisamment longtemps que vous utilisez ce forum, pour savoir qu'en cas de problème sur un script, le résultat d'une erreur ne suffit généralement pas à aider.
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é".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#15

Message par pierrotm777 »

He bien, voici le programme presque complet:
► Afficher le texte
Je joinds l'UDF Google Maps.au3

Appuyer une fois sur le bouton 'Add Route',
Puis,si vous appuyez sur le bouton 'Route Info' , j'obtiens cette même erreur.
(voir fonction _CreateTextList() )
Fichiers joints
Google Maps.au3
(29.56 Kio) Téléchargé 62 fois
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#16

Message par Tlem »

La prochaine fois, un zip avec tout le matos sera plus simple. ;)

En ce qui concerne l'erreur, autant pour moi.
Corrigez cette ligne :

Code : Tout sélectionner

$FileTmp &= $FileTmp & $i & "|" & $instruction[$i][0] & @CRLF
par celle-ci

Code : Tout sélectionner

$FileTmp &= $i & "|" & $instruction[$i][0] & @CRLF
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é".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#17

Message par pierrotm777 »

Merci Tlem, cela fonctionne parfaitement.

Et si jous souhaite garder le tableau complet dans le fichier texte ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#18

Message par Tlem »

Et bien tout simplement, utilisez _FileWriteFromArray, ou alors adaptez mon code pour avoir toutes les valeurs de ligne du tableau. ;)

Code : Tout sélectionner

$FileTmp &= $i & "|" & $instruction[$i][0] & "|" & $instruction[$i][1] &  "|" & $instruction[$i][2] &  "|" & $instruction[$i][3] & @CRLF
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é".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#19

Message par pierrotm777 »

Oui j'avais bien penser à adapter votre fonction de la sorte.

Mais j'aurais voulu comprendre pourquoi _FileWriteFromArray ne fonctionne pas comme je le pense.
J'ai essayé de remplacer la fonction _CreateTextList() par:

Code : Tout sélectionner

_FileWriteFromArray(@ScriptDir&"\FichierDeSortie.txt",$instruction)
Mais j'obtiens une erreur de dimension du tableau.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement d'un tableau

#20

Message par Tlem »

Après avoir jeté un oeil sur le code de la fonction _FileWriteFromArray, il est normal que celle-ci ne fonctionne pas comme vous le pensez, car elle est conçue pour traiter uniquement les tableaux à une dimension. :?

Donc il ne vous reste que le code que je vous ai fait. :roll:
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