[..] Array splitstring

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jcaspar
Niveau 7
Niveau 7
Messages : 449
Enregistré le : mar. 23 sept. 2008 17:58
Status : Hors ligne

[..] Array splitstring

#1

Message par jcaspar »

Bonjour à tous !

Je souhaite récupérer les informations d'un fichier texte
les données dans un tableau mais avec les deux informations sur la même ligne
pourriez vous svp m'expliquer comment je devrais m'y prendre ?

En vous remerciant pour votre aide !




adresse_email.fr | lefichier.pdf

Code : Tout sélectionner

#include <Array.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>

global $aArray

$exist=FileExists("c:\appli\test.txt")
msgbox(64," fixhier existe",$exist)
$lire=FileReadLine("c:\appli\test.txt")

if $exist=1   Then
                msgbox(64, "Fichier existe","xiste")
Else
                msgbox(64, "Fichier n'existe pas ","nexiste")
EndIf


msgbox(64,"Lire fichier",$lire)
$tableau=FileReadToArray("c:\appli\test.txt")
$chaine= StringSplit($lire,",",0)
$tableau2=FileReadToArray($chaine)


_ArrayDisplay($chaine," Contenu du tableau",64,"Test")


  For $i = 1 To $chaine[0]
        MsgBox($MB_SYSTEMMODAL, "", "$chaine[" & $i & "] - " & $chaine[$i])
    Next

Local $aExtract = _ArrayExtract($chaine, 1, 2, 2, 3)
_ArrayDisplay($aExtract, "Row 1-2 cols 2-3")


Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Array splitstring  

#2

Message par TommyDDR »

Vous parlez de 2 informations sur la même ligne (adresse_email.fr | lefichier.pdf), mais vous voulez lire les colonnes 2 et 3 (donc 3ème et 4ème colonnes) qui n'existent pas.
Je vous ai fait une fonction fileExtractDatas qui prend 3 paramètres :
1) Nom du fichier
2) Chaine de séparation entre les nouvelles lignes (@CRLF = nouvelle ligne dans les éditeurs de textes sous windows)
3) Chaine de séparation entre les données d'une même ligne (J'ai mis " | " comme vous l'avez montré, supprimez les espaces si votre fichier n'en contient pas autour du "|")
En supposant que vous voulez un tableau avec les données [mail][fichier] :
#include <Array.au3>
#include <Math.au3>
#include <MsgBoxConstants.au3>

Global $fileName = "c:\appli\test.txt"
Global $datas = fileExtractDatas($fileName, @CRLF, " | ")
If(@error) Then
   Exit MsgBox(0, "Erreur", "Fichier " & $fileName & " non trouvé.")
EndIf

_ArrayDisplay($datas," Contenu du tableau",64,"Test")


Local $aExtract = _ArrayExtract($datas, 1, 2, 2, 3)
_ArrayDisplay($aExtract, "Row 1-2 cols 2-3")




Func fileExtractDatas($fileName, $separatorLines, $seleratorColumn)
   If(Not(FileExists($fileName))) Then Return SetError(1, 0, 0)
   Local $retour[0][0]
   Local $content = StringSplit(FileRead($fileName), $separatorLines, 3)
   For $i = 0 To UBound($content, 1) - 1
      Local $datas = StringSplit($content[$i], $seleratorColumn, 3)
      ReDim $retour[UBound($retour, 1) + 1][UBound($retour, 2)]
      If(UBound($datas, 1) > UBound($retour, 2)) Then
         ReDim $retour[UBound($retour, 1)][UBound($datas, 1)]
      EndIf
      For $j = 0 To _Min(UBound($retour, 2), UBound($datas, 1)) - 1
         $retour[$i][$j] = $datas[$j]
      Next
   Next
   Return $retour
EndFunc
Fichier utilisé (c:/appli/test.txt) :

Code : Tout sélectionner

adresse_email1.fr | lefichier1.pdf
adresse_email2.fr | lefichier2.pdf
adresse_email3.fr | lefichier3.pdf
adresse_email4.fr | lefichier4.pdf
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
jcaspar
Niveau 7
Niveau 7
Messages : 449
Enregistré le : mar. 23 sept. 2008 17:58
Status : Hors ligne

Re: [..] Array splitstring

#3

Message par jcaspar »

Super génial !

Merci beaucoup pour vote réponse !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Array splitstring

#4

Message par mikell »

@Tommy
Pourquoi pas juste :

#Include <Array.au3>

$txt = "adresse_email1.fr | lefichier1.pdf" & @crlf & _
   "adresse_email2.fr | lefichier2.pdf" & @crlf & _
   "adresse_email3.fr | lefichier3.pdf" & @crlf & _
   "adresse_email4.fr | lefichier4.pdf"

Local $retour[0][2]
_ArrayAdd($retour, $txt)
_ArrayDisplay($retour)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Array splitstring

#5

Message par TommyDDR »

Parce que je n'utilise jamais l'UDF Array.au3 et que je ne connaissais pas cette utilisation de ArrayAdd :p
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Array splitstring

#6

Message par mikell »

TommyDDR a écrit : mer. 21 oct. 2020 13:44Parce que je n'utilise jamais l'UDF Array.au3
Il m'avait pourtant semblé entrevoir un _ArrayExtract et un _ArrayDisplay ... mais sinon c'est une excellente raison :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Array splitstring

#7

Message par TommyDDR »

J'ai repris celles que jcaspar avait mis dans son 1er post ^^
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Répondre