Tableau dynamique

darkflyer Messages postés 39 Date d'inscription samedi 3 juin 2006 Statut Membre Dernière intervention 28 mai 2007 - 28 mai 2007 à 17:05
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 29 mai 2007 à 11:12
bonjour,
j'avais une question concernant l'utilisation des tableau dynamiques pour lire un fichier dont je conais pas le nombre lignes ni de colonnes.
coment declarer et incrementer la taille et ajouter des elements...
merci

4 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
28 mai 2007 à 18:07
Salut
Ca manque de précision.
De quel type est ton tableau ? Comment l'as tu dimensionné
De quel type est ton fichier ? Texte ? Excel ?
Sous quelle forme lis-tu ce fichier ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
0
darkflyer Messages postés 39 Date d'inscription samedi 3 juin 2006 Statut Membre Dernière intervention 28 mai 2007
28 mai 2007 à 18:14
en fait c un tableau à double entrée, que je declare pour l'instant comme un tableau de double, mais comme je sais pas exctement la taille qu'il doit faire o final je le surdimonsionne o debut:
et le fichier c un fichier texte de plusieurs ligne, chaque ligne contenant un certain nombre d'informations separées par des espaces, et  en fait je le parcours ligne par ligne en decoupant à chaque boucle la ligne (voir le bout de code...)
Dim picreader As New StreamReader(filepic)
Dim lign AsInteger = 0
Dim colon AsInteger
DoWhile picreader.Peek() > -1
DimlineAsString
line = picreader.ReadLine() & vbNewLine
nl += 1
Dim Testlign() AsString = Split(line)
Dim LastNonEmpty AsInteger = -1
For i AsInteger = 0 To Testlign.Length - 1
If Testlign(i) <> ""Then
LastNonEmpty += 1
Testlign(LastNonEmpty) = Testlign(i)
EndIf
Next
ReDimPreserve Testlign(LastNonEmpty)
lign = lign + 1
For colon = 0 To 2
pic(lign - 1, colon) = Testlign(colon)
Next colon
Loop
picreader.Close()
bon ce ke je veu savoir c'est y a t il un moyen plus simple
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
28 mai 2007 à 19:49
Salut;

si tu chargeais d'un seul coup la totalité du fichier Texte et que tu l'éclatais sur vbnewline (utilisation de Split), tu obtiendrais précisément un tableau dont tu connaîtrais le nombre d'articles (Ubound) et qu'il te suffirait de copier dans le tien (auquel tu aurais donné la dimension maintenant connue)
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
29 mai 2007 à 11:12
salut,

la proposition de jmfmarques semble la plus adaptée

en VB6 çà donnerait :

Function GetArrayFromFile(ByRef sPath As String) As String()
    Dim FF As Integer
    FF = FreeFile

'   lit fichier vers buffer
    Dim sBuffer As String
    Open sPath For Input As #FF
        sBuffer = Input(LOF(FF), #FF)
    Close #FF

'   coupe buffer à chaque ligne donc VBCRLF
    Dim aLines() As String
    aLines = Split(sBuffer, vbCrLf)

'   lignes
séparée par VBTAB (à changer par ";" par exemple)
    Const SEPAR As String = vbTab
    Dim aRes() As String, i As Integer, j As Integer, aBuff() As String
    ReDim aRes(UBound(aLines), UBound(Split(aLines(0),
SEPAR)))
    For i = 0 To UBound(aLines)
        If LenB(aLines(i)) Then
            Erase aBuff
            aBuff = Split(aLines(i), SEPAR)
            For j = 0 To UBound(aBuff)
                aRes(i, j) = aBuff(j)
            Next j
        End If
    Next i

'   retour
    GetArrayFromFile = aRes

'  
destruc
    sBuffer = vbNullString
    Erase aLines
    Erase aBuff
    Erase aRes
End Function

te reste à adapter en DotNet
un petit tour sur Codyx.Org peut-être...

NB : dans mon exemple ne sont pas traités :
    *fichier inexistant
    *moins de colonnes dans une ligne que dans la première ligne
    *première ligne vide
    *fichier vide

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0