Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Importer un fichier CSV pour l'afficher dans une listview [ Archives Visual Basic / Fichier / Disque ] (digitalex)

jeudi 23 juin 2005 à 23:43:50 | Importer un fichier CSV pour l'afficher dans une listview

digitalex

je souhaiterais importer un fichier qui est au format CSV, et l'afficher dans un listview. Quelle méthode la mieux adaptée me conseillerez-vous, svp ?

est-ce que je dois splitter chaque ligne lue, et la placer dans la listview, morceau par morceau, ou bien il y a plus rapide et efficace ? avec un tableau ?

merci par avance pour votre aide.
amicalement
digit@lex

vendredi 24 juin 2005 à 08:28:05 | Re : Importer un fichier CSV pour l'afficher dans une listview

DeadlyPredator


Salut, voici le code que je te suggère. C'est moi qui l'a fait à 100%. Il est facilement adaptable pour n'importe quoi. Puisque je vais en avoir besoins, je crois qu'il est bon de t'en faire part. Le split (split()) n'est pas assez efficace. Il ne gère pas des cas spéciaux.

 Ce code gère pas mal tout ce qui peux arriver (fichier inexistant, ligne vide,  manque de colonnes, ...). En ce qui conserne le format CSV comme tel, voilà ce qui permet:
texte du fichier CSV{

"ab;cd";defg
"""ab;cd""";lgsdfgd;gdsgsdf
"allo"""""""

g

}devient
ab:cd   defg
"ab;cd"   lgsdfgd   gdsgsdf
allo"""

NOTE IMPORTANTE:  allo"""""" est invalide car il va retourner allo"". Quand il y a déjà présence du délimiteur de string dans la valeur, cette valeur doit être entouré de celui-ci. C'est le seul problème connu.


'Créé par DeadlyPredator le 24 juin 2005
'Je ne suis pas responsable de ce que ce code peut causer
Sub FillListViewWithCSV(ByVal strFile As String, ByRef lvListView As ListView, Optional ByVal bClearListView As Boolean = True, Optional ByVal strSeparator As String = ";", Optional ByVal strDelimiter As String = """", Optional ByVal bAddColsIfNeed As Boolean = False)
On Error Resume Next
Dim hFile As Integer, strLine As String, astrElems() As String, strCar As String, I As Long, bInStr As Boolean, strLastCar As String, strBuffer As String, Index As Long, lviLine As ListItem
hFile = FreeFile
    If Not ((GetAttr(strFile) And vbNormal) = vbNormal) Then Err.Clear: Exit Sub
    If bClearListView Then lvListView.ListItems.Clear
    If FileLen(strFile) = 0 Then Exit Sub
Open strFile For Input As hFile
    Do While Not EOF(hFile)
    Line Input #hFile, strLine
        For I = 1 To Len(strLine)
        strCar = Mid$(strLine, I, 1)
            If strCar = strDelimiter Then
            bInStr = Not bInStr
            If (strLastCar = strDelimiter) And bInStr Then strBuffer = strBuffer & strDelimiter
            ElseIf strCar = strSeparator And Not bInStr Then
                ReDim Preserve astrElems(Index)
                astrElems(Index) = strBuffer
                Index = Index + 1
                strBuffer = vbNullString
            Else
            strBuffer = strBuffer & strCar
            End If
        strLastCar = strCar
        Next
        If (strBuffer <> vbNullString) Or strCar = strSeparator Then
        ReDim Preserve astrElems(Index)
        astrElems(Index) = strBuffer
        Index = Index + 1
        strBuffer = vbNullString
        End If
        If strLine <> vbNullString Then
        Set lviLine = lvListView.ListItems.Add(, , astrElems(0))
            If Index > 0 Then
                For I = 1 To Index
                    If ((I + 1) > lvListView.ColumnHeaders.Count) Then
                        If bAddColsIfNeed Then
                        lvListView.ColumnHeaders.Add
                        lviLine.SubItems(I) = astrElems(I)
                        End If
                    Else
                    lviLine.SubItems(I) = astrElems(I)
                    End If
                lviLine.SubItems(I) = astrElems(I)
                Next
            End If
        Else
        lvListView.ListItems.Add
        End If
        'Manipuler la ligne du listview en utilisant lviLine
        '...
        Index = 0
        Set lviLine = Nothing
        Erase astrElems
        Err.Clear
    Loop
Close hFile
End Sub

'exemple d'utilisation
Private Sub Form_Load()
FillListViewWithCSV "c:\Classeur1.csv", Lv
End Sub

'simple comme 100*100=10000



VIVE LE QUÉBEC!
Essayez ça

Dim l As Long: Do Until l = -1: l = l + 1: Loop

vendredi 24 juin 2005 à 18:58:05 | Re : Importer un fichier CSV pour l'afficher dans une listview

digitalex

Grand merci! je vais essayer ça rapidement. Ah que c'est bon d'avoir des gens qui t'aident. Merci encore

vendredi 24 juin 2005 à 20:19:29 | Re : Importer un fichier CSV pour l'afficher dans une listview

digitalex

j'ai étudié la chose: tu analyses octet par octet sur chaque ligne, pour trouver les séparateurs ? Hmmm..si j'ai 1000 lignes, ça va un peu trainer, non ?

vais essayer.
merci

vendredi 24 juin 2005 à 23:55:33 | Re : Importer un fichier CSV pour l'afficher dans une listview

DeadlyPredator

C'est sûre que  la routine est quand même assez grosse sauf que il y a beaucoup de conditions donc ça peut faire paraître le code plus gros. J'ai testé: Pour un fichier de 42 ko, avec 1037 lignes, 7 colonnes, environ 4 caractères pas colonnes, NON COMPILÉ, l'éxécution dure environ 1,5 seconde. Mon ordi est minable: un AMD 750 mhz, 128 mo RAM, xp pro. Je juge donc que le code n'est pas si lent que ça.

VIVE LE QUÉBEC!
Essayez ça

Dim l As Long: Do Until l = -1: l = l + 1: Loop

samedi 25 juin 2005 à 00:06:49 | Re : Importer un fichier CSV pour l'afficher dans une listview

digitalex

merci pour ton aide, je vais voir ce que j'arrive à faire.



Cette discussion est classé dans : fichier, afficher, listview, csv, importer


Répondre à ce message

Sujets en rapport avec ce message

Importer un fichier CSV vers un listview [ par Razor_rws1 ] Salut, comme c'est indiqué dans le titre, je cherche un moyen simple et rapide d'importer les données d'un ficher CSV vers un listview.Merci de votre [VBA] importer un fichier csv [ par outofbusiness ] bonjour,je voudrais importer un fichier au format csv sous forme de table.En fait, je crée au préalable un BdD access avec ça :Set mobj = CreateObject importer sous DBASE-3 un fichier CSV [ par chateaux1234 ] Convertir un fichier CSV en Dbase 3.   La conversion se fait bien soit via excel 2003 (enregistrer sous ...) ou via un soft dédié. Mais lorsque le fic Importer 1 fichier csv [ par goldgorse ] quelqu'un peut me dire comment on fait en vba (access97) pour importer un fichier csv dans une table?merci Importer 1 fichier csv dans access97 avec vba [ par goldgorse ] bonjour,je voudrais importer 1 fichier .csv ds 1 table access97 avec vbaapparement il faudrait d'abord enregistrer un spectre et faire la commande : D Importer fichier texte dans une listview [ par z980x ] SalutJe ne sais pas du tout comment me servir d'une listview, alors je vous pose cette question :J'ai un fichier texte avec plusieurs lignes et a chaq Un petit coup de main ...Importer dans tables différentes selon le premier champ de ma ligne (à partir d'un fichier de type .csv) [ par Chantillyy ] Bonjour,Je suis débutante sous access et j'aurais une petite question qui paraîtra peut être "triviale" pour tous les experts access vba....je m'en ex HELP SVP :Importer dans différentes TABLES selon le premier champ de ma ligne (à partir d'un fichier de type .csv) [ par Chantillyy ] Bonjour,Je suis débutante sous access et j'aurais une petite question qui paraîtra peut être "triviale" pour tous les experts access vba....je m'en ex Importer fichier texte dans Listview [ par sylpar ] Bonjour,Je voudrais savoir comment importer un fichier texte dans une listview ?Je voudrais une boite de dialogue me permettant d'aller chercher le fi Importer un fichier csv dans access [ par fandy ] Bonjour ,Je suis débutante en programmation ,et j'ai un petit souciJe souhaiterai savoir comment faire pour importer monfichier.txt en par module ou e


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.