Lecture chiffre par chiffre d'un fichier !

ZogStriP Messages postés 164 Date d'inscription dimanche 16 novembre 2003 Statut Modérateur Dernière intervention 5 juillet 2005 - 25 déc. 2003 à 13:42
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 26 déc. 2003 à 14:08
Bonjour tout le monde et Joyeux Noël !!
Je voudrais savoir comment faire pour lire un tableau de chiffres d'un fichier !!
Exemple : (contenue de monFichier.txt)
4 4
0 1 2 3
4 5 6 7
0 3 5 5
9 2 5 2

Les deux premiers chiffres étant le nombre de colonnes et le nombre de lignes !!

Merci

ZogStriP

#include <stdio.h>
#define S "Hello, World\n"
main(){exit(printf(S) == strlen(S) ? 0 : 1);}

4 réponses

K@zuya Messages postés 306 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 15 février 2016
25 déc. 2003 à 14:47
Voila, j'ai fait une fonction qui resou ton problem:

Private Function ReadFileArray(File As String) As Integer()
Dim Char As String * 1
Dim Pos As Long
Dim NumList As String
Dim Temp() As String
Dim Result() As Integer
Dim X As Integer
Dim Y As IntegerIf Dir$(File) vbNullString Or File vbNullString Then GoTo FUNCTION_ERROR
Open File For Binary As #1
    Do While Not EOF(1)
        Pos = Pos + 1
        Get #1, Pos, Char
        If IsNumeric(Char) Then NumList = NumList & Char & Chr(0)
    Loop
Close #1
If NumList = vbNullString Then GoTo FUNCTION_ERRORIf Right$(NumList, 1) Chr(0) Then NumList Left$(NumList, Len(NumList) - 1)
Temp = Split(NumList, Chr(0))
ReDim Result(CInt(Temp(0)) - 1, CInt(Temp(1)) - 1)
For i = 2 To UBound(Temp)
    Result(X, Y) = CInt(Temp(i))
    If X < CInt(Temp(0)) - 1 Then
        X = X + 1
    Else
        X = 0
        Y = Y + 1
        If Y = CInt(Temp(1)) Then Exit For
    End If
Next
ReadFileArray = Result
Exit Function
FUNCTION_ERROR:
ReDim Result(0, 0)
ReadFileArray = Result
End Function


cette fonction te ronvoi un tableau a 2 dimensions X et Y donc pour l'utiliser, tu fait comme sa:

Dim Temp() As Integer
Temp = ReadFileArray("c:\tableau.txt")
MsgBox Temp(2, 3)

ici, si on pernai ton tableau,
on obtiendrai: 5
explication:
X=2 et Y=3
X
0 1 2 3
4 5 6 7
0 3 5 5
Y 9 2 5 2

voila :p
K@zuya 8-)
0
K@zuya Messages postés 306 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 15 février 2016
25 déc. 2003 à 14:50
merde, les espaces ont été supprimés, je refai l'explication:
X=2 et Y=3
------------X
----0 - 1 - 2 - 3
----4 - 5 - 6 - 7
----0 - 3 - 5 - 5
Y --9 - 2 - 5 - 2

5 est à l'intersection de X=2 et Y=3 donc le chiffre pri dans le tableau est: 5
voila :p

K@zuya 8-)
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
26 déc. 2003 à 14:03
Excuse-moi Kazuya, mais je ne trouve pas ta fonction super nickel (Code spaghetti, 2 boucles successives, bcp de variables, ...) alors j'en ait fait une autre :

Private Function GetArrayFromFile(sFile As String, ReturnedArray() As Long) As Boolean
Dim i As Long, j As Long, X As Long, Y As Long, Idx As Long
Dim FN As Long, sLine As String, sBuffer As String
    If sFile "" Or Dir$(sFile) "" Then
        GetArrayFromFile = False
        Exit Function
    End If
    FN = FreeFile
    Open sFile For Input As #FN
    Line Input #FN, sLine
    Idx = InStr(sLine, " ")
    X = CLng(Left$(sLine, Idx - 1))
    Y = CLng(Mid$(sLine, Idx + 1))
    ReDim ReturnedArray(1 To X, 1 To Y)
    i = 1
    While Not EOF(FN)
        Line Input #FN, sLine
        sLine = sLine & " "
        For j = 1 To Y
            Idx = InStr(sLine, " ")
            ReturnedArray(i, j) = CLng(Left$(sLine, Idx - 1))
            sLine = Mid$(sLine, Idx + 1)
            If j < Y And Trim$(sLine) = "" Then
                GetArrayFromFile = False
                Exit Function
            End If
        Next
        i = i + 1
    Wend
    If i <= X Then
        GetArrayFromFile = False
        Exit Function
    End If
    Close #FN
    GetArrayFromFile = True
End Function

Cette fonction prend en arg le nom du fichier et le tableau de long dans lequel sera rangé le résultat, et renvoi True si celui-ci est significatif, et false sinon (Pb dans la lecture du fichier ou nb de lignes/valeur par ligne incohérent avec les données de la 1ere ligne)
Je suis parti du postulat de départ que les données était séparé par des espaces sur chaque ligne et qu'il s'agissait d'un fichier texrte simple (sortant du notepad par exemple)

Christophe R.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
26 déc. 2003 à 14:08
Je viens de voir un petit truc sur ma fonction : Il faut rajouter 1 "Close #FN" juste avant le "Exit Function" qui se trouve dans le test "If j< Y And ..." et déplacer le Close #FN de la fin juste après le "Wend"...

Christophe R.
0
Rejoignez-nous