IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Eclater le contenu d'un ".csv" dans un tableau


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Par défaut Eclater le contenu d'un ".csv" dans un tableau
    Bonjour,

    Je bataille depuis hier pour éclater le contenu d'un fichier "csv" dans un tableau afin de pouvoir le réorganiser pour l'importer dans une base de donnée.

    Voici le code que j'ai pondu, celui-ci éclate bien le contenu dans un tableau mais seulement pour la dernière ligne...
    La boucle "For i = 0 to 6" Correspond au nombre d'information par ligne en l'occurence ici 7.
    La boucle "For j = 0 to 5" Correspond au nombre de ligne ici 5.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Dim objFso: Set objFso = CreateObject("Scripting.FileSystemObject")
    Const ForReading = 1, ForWriting = 2 
    Dim FinalTab(5,6)
    Set ExportFile = objFso.OpenTextFile(".\Src\Productkey\ExportBrut.txt", ForReading)
     
    While Not ExportFile.AtEndOfStream
    	Dim Line : Line = ExportFile.ReadLine			
    	Dim TabExport : TabExport = split(Line,",")
     
    	For i = 0 to 6
    		For j = 0 to 5
    			FinalTab(j,i) = TabExport(i)
    		Next
    	Next
    Wend
     
    ExportFile.Close
    Wscript.echo "de 0,0 a 0,6"
    Wscript.echo FinalTab(0,0)
    Wscript.echo FinalTab(0,1)
    Wscript.echo FinalTab(0,2)
    Wscript.echo FinalTab(0,3)
    Wscript.echo FinalTab(0,4)
    Wscript.echo FinalTab(0,5)
    Wscript.echo FinalTab(0,6)
    Wscript.echo ""
    Wscript.echo ""
     
    Wscript.echo "de 1,0 a 1,6"
    Wscript.echo FinalTab(1,0)
    Wscript.echo FinalTab(1,1)
    Wscript.echo FinalTab(1,2)
    Wscript.echo FinalTab(1,3)
    Wscript.echo FinalTab(1,4)
    Wscript.echo FinalTab(1,5)
    Wscript.echo FinalTab(1,6)
    Wscript.echo ""
    Wscript.echo ""
     
    Wscript.echo "de 2,0 a 2,6"
    Wscript.echo FinalTab(2,0)
    Wscript.echo FinalTab(2,1)
    Wscript.echo FinalTab(2,2)
    Wscript.echo FinalTab(2,3)
    Wscript.echo FinalTab(2,4)
    Wscript.echo FinalTab(2,5)
    Wscript.echo FinalTab(2,6)
    Wscript.echo ""
    Wscript.echo ""
    En retour j'ai ceci:
    Dans le tableau, FinalTab(0,0) , FinalTab(1,0) et FinalTab(2,0) contiennent la même chaine etc.

    Voila si quelqu’un veux bien m'aider...

  2. #2
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Bonjour,

    Voici comment je ferais pour obtenir le résultat que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Const FOR_READING = 1
    Dim objFso, objExportFile, strLine, arrExport, FinalTab(3,3)
     
    Set objFso = CreateObject("Scripting.FileSystemObject")
    Set objExportFile = objFso.OpenTextFile(".\a.txt", FOR_READING)
     
    i = 0
    Do Until objExportFile.AtEndOfStream
    	strLine = objExportFile.ReadLine			
    	arrExport = split(strLine,",")
    	For j = 0 to UBound(arrExport)
    		FinalTab(i,j) = arrExport(j)
    	Next
    	i = i + 1
    Loop
     
    objExportFile.Close
    Wscript.echo "de 0,0 a 0,2"
    Wscript.echo FinalTab(0,0)
    Wscript.echo FinalTab(0,1)
    Wscript.echo FinalTab(0,2)
    Wscript.echo ""
     
    Wscript.echo "de 1,0 a 1,2"
    Wscript.echo FinalTab(1,0)
    Wscript.echo FinalTab(1,1)
    Wscript.echo FinalTab(1,2)
    Wscript.echo ""
     
    Wscript.echo "de 2,0 a 2,2"
    Wscript.echo FinalTab(2,0)
    Wscript.echo FinalTab(2,1)
    Wscript.echo FinalTab(2,2)
    Wscript.echo ""
    Les tests faits avec un csv plus petit :
    Ce code suffira si la taille de ton CSV est fixe (nombre de ligne et nombre de colonnes), mais si ce n'est pas le cas tu auras des buffer overflow dès que le nombre des données dépassera la taille de ton tableau tel que le script est écrit...

    Si le fichier CSV est de taille variable, Il faudra redimensionner te tableaux de manière dynamique (voir "ReDim Preserve" dans la doc vbscript).

    Bonne continuation.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Par défaut
    Salut,

    Merci pour la solution que tu apportes, ca m'a bien dépanner.

    Pour la taille du fichier "csv", en effet son nombre de ligne est variable mais ne devrait pas dépasser les 15 lignes. Du coup j'avais prévu d'initialiser un tableau "Max" assez grand genre:
    De toute facon derère je fait un boucle For par rapport au nombre de ligne pour renseigner un nouveau fichier "csv". La boucle For récupère le nombre de ligne et agit en fonction pour ne pas parcourir tout le tableau et les case vide. C'est pas très joli mais sa fonctionne bien.

    Merci encore.

  4. #4
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    OK.

    Pour faire moins moche, et juste au cas ou ça t'intéresse, voici une méthode pour le faire de manière dynamique, sans avoir à te soucier de la taille de ton fichier d'entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Const FOR_READING = 1
    Dim objFso, objExportFile, strLine, arrExport, arrFinalTab
     
    Set objFso = CreateObject("Scripting.FileSystemObject")
    Set objExportFile = objFso.OpenTextFile(".\a.txt", FOR_READING)
     
    i = 0
    ReDim arrFinalTab(i)
    Do Until objExportFile.AtEndOfStream
    	ReDim Preserve arrFinalTab(i)
    	arrFinalTab(i) = split(objExportFile.ReadLine,",")		
    	i = i + 1
    Loop
    objExportFile.Close
     
    i = 1
    For Each arrTmp In arrFinalTab
    	WScript.Echo "Line " & i
    	For Each strTmp In arrTmp
    		WScript.Echo vbTab & strTmp
    	Next
    	Wscript.echo ""
    	i = i + 1
    Next
    Bonne continuation.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 13
    Par défaut
    Le tout servi sur un plateau, . Je vais regardé plus en détail parce-que je ne comprend pas tout ^^, demain si j'ai le temps. J'ai un autre script à mettre à jour quitte à refaire autant faire bien et tout comprendre.

    Encore Merci.


    [EDIT]
    Salut,

    Alors j'ai analysé un peu ton code, mais je ne vois pas trop comment faire pour sélectionner seulement les informations du tableau que je souhaite rediriger vers le nouveau fichier. Je m'explique, au final pour pouvoir réorganiser mon "csv" je fait ainsi:
    Wscript.Echo FinalTab(k,0) & ";" & FinalTab(k,2)
    Ca me permet de sectionner uniquement ce que je veux rediriger vers mon fichier.

    Avec ton nouveau code je ne peux pas car les infos sont présentes uniquement dans cette boucle si j'ai bien compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For Each arrTmp In arrFinalTab
    	WScript.Echo "Line " & i
    	For Each strTmp In arrTmp
    		WScript.Echo vbTab & strTmp
    	Next
    	Wscript.echo ""
    	i = i + 1
    Next
    A plus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. mettre le contenu d'une zone de texte dans un tableau
    Par lepieux dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 03/05/2010, 18h19
  2. Script shell : afficher le contenu des variables entre simple quote
    Par mualki dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 23/01/2010, 00h14
  3. Réponses: 32
    Dernier message: 11/03/2007, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo