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

C Discussion :

extraire des données d'un fichier .txt


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 39
    Points : 27
    Points
    27
    Par défaut extraire des données d'un fichier .txt
    Bonjour,

    Je suis très débutant en C et après avoir regardé différents tuto et forums je n'ai toujours pas trouvé la solution à mon problème.

    J'ai des fichiers .txt contenant des valeurs numériques que je souhaite extraire et mettre dans un tableau à deux dimensions pour y accéder facilement et les exploiter dans des calculs.

    Voilà quelques extraits des fichiers en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096  2.096 
     2.436  2.436  2.436  2.435  2.456  2.457  2.454  2.453  2.453  2.451  2.451  2.447  2.447  2.444  2.442  2.440  2.432  2.276  2.276  2.274  2.274  2.274  2.268  2.267  2.348  2.346  2.204  2.200  2.178  2.172  2.168  2.164  2.162  2.179  2.191  2.261  2.257  2.254  2.249  2.246  2.244  2.171  2.167  2.365  2.159  2.156  2.252  2.248  2.239  2.136  2.130  2.126  2.260  2.257  2.252  2.168  1.983  1.981  1.979  1.978  1.954  1.950  1.950  1.902  1.896  1.797  1.800  1.796  1.726  1.755  1.752  1.752  1.752  1.715  1.717  1.741  1.760  1.816  1.817  1.816  1.942  1.779  1.777  1.573  1.573  1.572  1.570  1.568  1.566  1.588  1.658  1.711  1.709  1.776  1.756  1.752  1.749  1.746  1.745  1.741  1.810  1.788  1.793  1.750  1.753  1.716  1.724  1.728  1.733  1.688  1.754  1.728  1.738  1.746  1.752  1.760  1.769  1.775  1.799  1.804  1.813  1.884  1.956  1.962  1.967  1.973  1.873  1.914  1.917  2.012  2.019  1.826  1.827  1.827  1.826  1.826  1.824  1.821  1.780  1.778  1.793  1.792  1.793  1.793  1.792  1.794  1.793  1.979  1.980  1.980  1.727  1.729  1.916  1.920  1.923  1.926  1.929  1.979  2.034  2.039  2.041  1.919  1.923  1.924  1.927  1.869  1.869  1.873  1.920  2.082  2.084  2.082  2.082  2.082  2.084  2.082  1.985  1.985  2.012  2.009  2.018  2.015  2.010  2.006  2.003  1.999  2.121  2.116  2.111  2.276  2.280  2.277  2.272  2.267  2.286  2.280  2.276  2.169  2.062  2.057  2.055  2.052  2.049  2.047  2.043  2.044  2.041  2.154  2.121  2.133  2.132  2.039  2.036  2.034  2.037  2.057  2.057  2.036  2.052  2.051  2.052  2.053  2.055  2.055  2.051  2.120  2.121  2.119  2.047  2.050  2.048  2.092  2.244  2.241  2.436  2.434  2.434  2.438  2.437  2.434  2.436 
     2.226  2.225  2.224  2.224  2.228  1.779  1.773  1.871  1.871  1.781  1.778  2.048  2.025  2.002  2.001  2.076  2.081  2.136  2.156  2.103  2.122  2.110  2.113  2.116  2.089  2.139  2.125  2.094  2.094  2.125  2.124  2.124  2.123  2.143  2.226  2.309  2.303  2.099  2.079  2.056  1.999  1.975  1.948  2.077  2.054  2.024  1.956  1.977  1.963  1.948  1.936  1.607  1.703  1.700  1.524  1.485  1.495  1.485  1.425  1.431  1.434  1.290  1.293  1.270  1.268  1.313  1.232  1.237  1.341  1.152  1.159  1.418  1.560  1.347  1.349  1.439  1.441  1.256  1.216  1.218  1.216  1.218  1.216  1.212  1.383  1.380  1.330  1.357  1.549  1.547  1.547  1.681  1.738  1.689  1.709  1.717  1.827  1.794  1.801  1.806  1.809  1.813  1.852  1.851  1.885  1.883  1.798  1.805  1.845  1.926  1.923  1.795  1.787  1.785  1.780  1.683  1.678  1.563  1.497  1.601  1.615  1.547  1.560  1.572  1.603  1.615  1.626  1.636  1.574  1.598  1.605  1.694  1.650  1.648  1.649  1.651  1.845  1.782  1.784  1.723  1.725  1.730  1.737  1.744  1.649  1.657  1.666  1.565  1.819  1.829  1.841  1.987  1.996  1.972  1.978  1.831  1.917  1.875  1.865  1.903  1.907  1.936  1.885  1.950  2.304  2.152  2.145  2.090  2.086  2.083  2.080  1.998  1.995  1.994  2.146  2.146  2.146  2.193  2.192  2.194  2.226  2.224  2.233  2.235  2.337  2.330  2.326  2.306  2.299  2.293  2.084  2.078  2.074  2.067  2.063  2.057  2.269  2.202  2.194  2.192  2.181  2.175  2.247  2.242  2.250  2.245  2.242  2.236  2.230  2.225  2.233  2.348  2.322  2.317  2.308  2.302  2.310  2.280  2.261  2.256  2.253  2.246  2.123  2.121  2.112  2.112  2.111  2.108  2.109  2.109  2.110  1.975  1.973  1.895  1.895  1.896  2.017  2.208  2.205  2.196  2.226 
     2.402  2.416  2.416  2.418  1.936  1.952  1.935  2.202  2.240  2.241  2.206  2.203  2.275  2.273  2.344  2.348  2.231  2.165  1.995  2.006  2.012  1.999  1.930  1.936  1.940  1.893  1.889  2.025  1.917  1.891  1.879  1.930  1.926  1.890  1.778  1.948  2.039  2.034  2.019  2.006  2.075  2.052  2.024  1.917  1.881  1.888  1.827  1.824  1.907  1.918  1.764  1.834  1.800  1.651  1.653  1.573  1.958  2.108  2.201  1.886  1.899  1.907  1.693  1.706  1.091  1.110  1.127  1.350  1.359  1.367  0.896  0.838  0.851  0.758  0.776  0.793  0.868  0.891  0.920  0.939  0.959  0.974  1.199  0.962  0.985  1.132  1.139  1.286  1.409  1.394  1.388  1.389  1.386  1.383  1.339  1.335  1.386  1.413  1.402  1.496  1.623  1.615  1.606  1.596  1.684  1.678  1.838  1.831  1.847  1.711  1.626  1.717  1.520  1.523  1.519  1.633  1.626  1.622  1.572  1.554  1.547  1.544  1.536  1.468  1.540  1.591  1.529  1.599  1.604  1.607  1.676  1.693  1.729  1.745  1.814  1.911  1.757  1.905  1.945  1.956  1.853  1.749  1.803  1.804  1.797  1.790  1.783  1.808  1.803  1.790  1.848  1.859  1.980  1.985  2.043  2.038  2.033  2.068  2.058  2.048  2.041  2.042  2.134  2.291  2.283  2.379  2.429  2.345  2.446  2.434  2.510  2.487  2.290  2.263  2.239  2.214  2.120  2.212  2.201  2.193  2.194  2.191  2.194  2.200  2.280  2.287  2.307  2.280  2.272  2.262  2.336  2.324  2.301  2.312  2.301  2.240  2.240  2.226  2.218  2.331  2.326  2.329  2.406  2.402  2.394  2.420  2.409  2.403  2.433  2.423  2.418  2.416  2.414  2.416  2.472  2.350  2.352  2.350  2.477  2.474  2.309  2.289  2.194  2.273  2.270  2.269  2.283  2.289  2.299  2.309  2.352  2.340  2.432  2.403  2.449  2.456  2.484  2.508  2.533  2.412  2.402 
     1.783  1.657  1.639  1.744  1.816  1.852  2.002  2.002  2.019  1.938  2.053  2.240  2.197  2.213  2.235  2.207  2.405  2.343  2.352  2.356  2.422  2.142  2.204  2.146  2.025  2.114  2.103  2.107  2.171  2.165  2.168  2.140  2.117  2.127  2.013  2.076  2.050  2.024  2.074  1.834  1.853  1.846  1.900  1.836  1.693  1.699  1.727  1.686  1.701  1.711  1.568  1.584  1.751  1.956  1.944  1.810  1.952  2.178  2.191  2.177  2.158  2.031  2.025  2.016  1.397  1.902  1.877  1.853  1.304  1.620  1.310  1.313  1.322  1.328  1.337  1.220  1.236  1.149  0.805  0.823  0.836  0.759  0.756  1.131  1.218  1.246  1.246  1.413  1.301  1.295  1.286  1.520  1.488  1.483  1.536  1.531  1.594  1.711  1.700  1.687  1.748  1.789  1.772  1.756  1.741  1.523  1.389  1.385  1.381  2.089  1.854  1.855  1.925  1.928  2.032  2.039  1.943  1.909  1.881  1.710  1.642  1.644  1.662  1.566  1.569  1.634  1.441  1.733  1.754  1.778  1.850  1.954  2.369  2.389  2.426  2.442  2.542  2.558  2.618  2.630  2.256  2.004  1.919  1.833  2.121  1.716  1.713  1.563  1.644  1.747  1.682  1.781  1.893  1.756  1.928  1.903  1.963  1.881  2.212  2.202  2.196  2.295  2.399  2.410  2.405  2.526  2.504  2.530  2.473  2.459  2.450  2.425  2.323  2.301  2.290  2.271  2.352  2.271  2.238  2.131  2.145  2.066  2.029  1.987  1.967  1.965  1.895  1.898  1.896  1.656  1.569  1.563  1.442  1.452  1.107  1.113  1.073  1.057  1.569  1.174  1.165  1.172  1.724  1.698  1.726  1.424  1.461  1.396  1.416  1.428  1.423  1.412  1.252  1.138  1.101  1.077  1.066  1.908  1.920  1.735  1.871  1.603  1.652  1.701  2.046  1.697  1.690  1.680  1.665  2.273  1.866  1.864  1.878  1.898  1.918  1.940  1.960  2.168  1.853  1.828  1.783
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002  1.0320068e-002
      9.4394989e-003  9.4461227e-003  9.4670876e-003  9.4075469e-003  9.4154448e-003  9.3689739e-003  9.2648341e-003  9.2938717e-003  9.2464643e-003  9.0589483e-003  9.1180495e-003  9.2707435e-003  9.2567989e-003  9.3533392e-003  9.3529179e-003  9.4324309e-003  9.4405380e-003  9.5687664e-003  9.6965929e-003  9.6081509e-003  9.5480860e-003  9.4620606e-003  9.4129749e-003  9.4953339e-003  9.5004712e-003  9.3927828e-003  9.3075010e-003  1.0301723e-002  1.0509620e-002  1.0579194e-002  1.0675359e-002  1.0623497e-002  1.0748097e-002  1.0887640e-002  1.0970990e-002  1.1023033e-002  1.1058276e-002  1.1004356e-002  1.0930472e-002  1.0920899e-002  1.0826161e-002  1.0804467e-002  1.0754202e-002  1.0633189e-002  1.0578178e-002  1.0079603e-002  1.0168298e-002  1.0130305e-002  1.0312663e-002  1.0326471e-002  1.0324477e-002  1.0385247e-002  1.0322589e-002  1.0387886e-002  1.0387216e-002  1.0305143e-002  1.0256083e-002  1.0136406e-002  1.0010070e-002  9.8887217e-003  9.8304415e-003  9.6627077e-003  9.5359005e-003  9.2193259e-003  9.2885406e-003  9.1540473e-003  9.0686079e-003  9.1198614e-003  9.0567380e-003  9.0479880e-003  8.9920450e-003  9.0222932e-003  8.8968579e-003  8.8991763e-003  8.8423419e-003  8.7525430e-003  8.5851121e-003  8.5326206e-003  8.4864236e-003  8.5023441e-003  8.4272331e-003  7.7006455e-003  7.6115301e-003  7.5876817e-003  7.6074035e-003  7.6548475e-003  7.6222118e-003  7.5556899e-003  7.6039907e-003  7.5909243e-003  7.4508497e-003  7.4235178e-003  7.3986709e-003  7.3750658e-003  7.3648203e-003  7.3462151e-003  7.2842719e-003  7.2088737e-003  7.5305525e-003  7.7391669e-003  7.7506396e-003  7.7224662e-003  7.7243264e-003  7.7694567e-003  7.6882528e-003  7.8604481e-003  7.9368408e-003  7.9498055e-003  7.9010226e-003  7.9281182e-003  7.9059737e-003  7.9687972e-003  7.9302689e-003  7.8963523e-003  7.9724554e-003  8.1183600e-003  8.2176108e-003  8.3704162e-003  8.5240996e-003  8.6591406e-003  8.7719993e-003  8.9102475e-003  9.0716888e-003  9.0929302e-003  9.2351319e-003  9.2015529e-003  9.2512942e-003  9.3052907e-003  9.3863255e-003  9.3798098e-003  9.5464135e-003  9.6900109e-003  9.8779434e-003  9.9742614e-003  1.0743876e-002  1.0875768e-002  1.1081796e-002  1.1281771e-002  1.1419753e-002  1.1797983e-002  1.1888603e-002  1.2010682e-002  1.2133472e-002  1.2150887e-002  1.2075562e-002  1.2014346e-002  1.1987173e-002  1.1916124e-002  1.1805307e-002  1.1666080e-002  1.1670147e-002  1.1558694e-002  1.1513475e-002  1.1597754e-002  1.1656690e-002  1.1716561e-002  1.1736557e-002  1.1766375e-002  1.1729418e-002  1.1755481e-002  1.1786184e-002  1.1672165e-002  1.1515483e-002  1.1512497e-002  1.1434037e-002  1.1309164e-002  1.1209061e-002  1.1157652e-002  1.1093745e-002  1.1025004e-002  1.1016577e-002  1.0898670e-002  1.0852551e-002  1.0769552e-002  1.0778206e-002  1.0874031e-002  1.0811793e-002  1.0735230e-002  1.0578710e-002  1.0500029e-002  1.0392582e-002  1.0299279e-002  1.0118708e-002  1.0125986e-002  1.0049245e-002  9.9455041e-003  9.9303249e-003  9.2251251e-003  9.2023646e-003  9.2526273e-003  9.2249621e-003  9.2945100e-003  9.1828044e-003  9.2131153e-003  9.2309882e-003  9.2460657e-003  9.3770526e-003  9.3861304e-003  9.2681852e-003  9.1890380e-003  9.0644444e-003  9.0556573e-003  9.0803271e-003  9.1081777e-003  8.9942902e-003  9.2144836e-003  9.3287965e-003  9.4127935e-003  9.4503327e-003  9.5278708e-003  9.6133144e-003  9.6605671e-003  9.7404577e-003  9.8504219e-003  9.7280274e-003  9.6444234e-003  9.5904246e-003  9.4301584e-003  9.3054004e-003  9.1010627e-003  8.9587133e-003  8.7998443e-003  8.7512645e-003  8.6638825e-003  8.5271106e-003  8.5676980e-003  8.4440780e-003  8.4837380e-003  8.3438139e-003  8.2674112e-003  8.1546555e-003  8.1961161e-003  8.1958845e-003  8.0755468e-003  7.9670293e-003  7.7820125e-003  7.6446395e-003  7.4342079e-003  7.2362275e-003  6.9812980e-003  6.8079891e-003  5.8612061e-003  5.9182811e-003  5.8912303e-003  5.8923511e-003  5.9192641e-003  5.9939377e-003  6.0717487e-003  6.1221820e-003  6.2279756e-003  6.1574154e-003  6.0291208e-003  5.9993459e-003  6.0041394e-003  5.9034618e-003  5.8944164e-003  5.9000507e-003  5.9522835e-003  6.8769693e-003  6.9514410e-003  7.2617541e-003  7.4638362e-003  7.6784164e-003  7.8778508e-003  7.9883154e-003  8.2146644e-003  8.2426844e-003  8.3591368e-003  8.5324915e-003  8.6907599e-003  8.6640832e-003  8.7047459e-003  8.6507797e-003  8.7660819e-003  8.8819200e-003  8.9997246e-003  8.8118508e-003  8.8644984e-003  8.9978805e-003  9.1890631e-003  9.3375552e-003  9.5798206e-003  9.8208828e-003  9.8027923e-003  9.9076897e-003  9.9596947e-003  9.9604052e-003  9.9806238e-003  9.9184740e-003  9.9910313e-003  1.0010944e-002  1.0036336e-002  1.0057119e-002  1.0176033e-002  9.9193672e-003  1.0030552e-002  1.0045325e-002  1.0139600e-002  1.0175283e-002  1.0175316e-002  1.0299607e-002  1.0180102e-002  1.0277843e-002  1.0207844e-002  1.0140655e-002  1.0050552e-002  9.9861522e-003  9.9164889e-003  9.6875583e-003  9.7032263e-003  9.5348891e-003  9.5041653e-003  9.7729532e-003  9.7863913e-003  9.7142938e-003  9.6447355e-003  9.6891783e-003  9.6653832e-003  9.5923322e-003  9.5099634e-003  9.4394989e-003
    Mon idée est de parcourir le fichier et de replacer la j-ème valeur de la i-ème ligne à la même place (tab[i][j]) dans un tableau de deux dimensions.

    Initialement j'avais imaginé utiliser fscanf mais comme mon fichier a 241 valeurs par lignes (et 121 lignes), je me voyais mal écrire un truc du genre fscanf(file,%f%f...%f,var1 var2...var241) avec 241 fois %f et 241 variables.

    En fouillant un peu j'ai vu qu'on pouvait utiliser fseek pour décider de l'endroit où on place le "curseur" mais j'ai cru comprendre qu'on le déplaçait caractère par caractère et ça ne m'aide pas beaucoup plus...

    Enfin j'ai vu qu'il existait aussi la commande fgets mais comme il faut connaître le nombre de caractère à lire je ne sais pas si c'est très adapté à mon cas.

    Bref, vous aurez compris que je rame un peu (hum hum même un peu plus que ça), et que j'aurais bien besoin de vos conseils.
    Merci d'avance pour votre aide !!

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Si tu lis un float avec fscanf, puis tu te décales ton curseur de lecture jusqu'à la prochaine espace, tu peux récupérer un float et te déplacer au début du prochain. Tu mets ça dans une boucle et tu peux récupérer la ligne entière.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        for(i=0;i<241;i++)
        {
            fscanf(fic, "%d", &tmp);
            printf("Lu : %d", tmp);
            while( (c=fgetc(fic)) != ' ' )
                ;
        }
    EDIT : fscanf fait avancer le curseur comme un grand donc inutile de lire les espaces...

  3. #3
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonjour,

    Je me permettrai seulement qqls petites remarques.

    - Avec le fscanf il est impératif de tester le retour. Cad le nombre d'éléments trouvés, sinon tmp ne sera pas chargé correctement.
    - Le fichier contient des nombres réels, donc le format à utiliser est "%f".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int ret = 0 ;
    float tmp = 0. ;
    ...
        ret = fscanf(fic, "%f", &tmp);  // C'est des nombres réels
        if(ret==1)
            printf("Lu : %g", tmp);
    ...
    - while( (c=fgetc(fic)) != ' ' ) ; n'est pas correcte, il faut while( (c=fgetc(fic)) == ' ' && c != EOF) ;. De plus l'index du fichier s'arrêtera sur un chiffre ou un retour chariot. Donc la lecture par le fscanf suivant sera fausse.
    Il faut tester le caractère c pour vérifier :
    1. Si c = EOF, implique que la fin de fichier (ou erreur) est arrivé.
    2. Si c = '\n' (retour chariot), implique nouvelle ligne.
    3. Sinon, il faut remonter d'un cran l'index de fichier pour lire le nombre correctement. Exemple: fseek(fic, ftell(fic)-1, SEEK_SET).


    Avec la détection du retour chariot ('\n') on peut trouver le nombre de lignes.
    Tant que la fin de fichier n'est pas atteinte
        Si valeur lue ok : tab[ligne][colonne] = valeur et colonne++
        si c = retour chariot ok : ligne++ et colonne = 0
    
    Ne reste plus qu'à définir correctement la taille du tableau.


    Bonne continuation.
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Merci pour vos réponses !

    Elijha, je n'ai pas très bien compris tes remarques sur la nécessité de tester le retour et sur la syntaxe du while.

    D'ailleurs, Bktero, il s'avère qu'en fait j'ai fait le programme suivant dans lequel je n'ai pas mis ce while et il semble bien fonctionner, étais-ce nécessaire?

    J'écris "semble" car les tests que j'ai fait me donnent ce que je veux mais n'étant pas très calé je suis peut être passé à côté d'une subtilité...

    Voilà ce que j'ai fait, qu'en pensez vous ?

    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
    #include <stdio.h>  
     
    int main() {  
     
        int i,j;
    	double tab [121][241];
    	double tmp;
     
        FILE *fichier = fopen("D:\\Documents and Settings\\ESA0HEIGHT.TXT", "rb");  
     
    	if (fichier != NULL)
        {
    		printf("fichier ouvert\n");
    	    for(i=0;i<121;i++)
    		{
    			for(j=0;j<241;j++)
    			{
     
    				fscanf(fichier, "%lf", &tmp);
    				tab[i][j]=tmp;
    				printf("Lu : %lf", tmp);
     
    			}
    		}
    		fclose(fichier);
    		printf("fichier referme\n");
    		printf("la valeur de tab(0,0) est : %lf \n", tab[0][0]);
    		printf("la valeur de tab(2,27) est : %lf \n", tab[2][27]);
    		printf("la valeur de tab(101,150) est : %lf \n", tab[101][150]);
    		printf("la valeur de tab(120,240) est : %lf \n", tab[120][240]);
    	}
        else
        {
            printf("Impossible d'ouvrir le fichier .txt");
        }  
     
    	getchar();
        return 0  ;
     
    }
    merci encore pour votre aide

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    @Elijha : ce bout de code n'était bien sûr qu'un exemple pour éviter de faire un scanf avec 241 variables. Il y a évidemment des vérifications à faire, telles que celles données par feof() mais aussi ferror() (je présume que fscanf peut rater une conversion à cause d'une erreur sur le fichier lui-même et non uniquement son contenu). Merci pour la remarque sur la mauvaise lecture, je me suis fait avoir car les nombres dans mon fichier commençaient tous par un zéro, et du coup je ne voyais pas l'erreur de conversion !

    @granbapt : Pour ce qui est de la vérification des erreurs, il faut en effet tester le retour de fscanf. Si ton fichier contient un 'a' par exemple, tu ne pourras pas le transformer en float et le retour de fscanf te l'indiquera.
    De plus, comme tu l'as remarqué, le while pour lire les espaces de sert à rien. Scanf fait avancer l'indicateur de lecture et est capable de gérer les espaces mais aussi les '\n'.

    Avec les corrections d'erreur et l'insensibilité de fscanf, on peut faire un code comme ci-dessous, vous me direz si quelque chose cloche :
    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
    51
    52
    53
    54
    55
    56
    int main(void)
    {
        FILE * fic = fopen("numero.txt", "r");
        float tmp = 0;
        int ret = 0;
        int col = 0;
        int ligne = 0;
     
        // Determiner le nombre de lignes
        // Ici, je simplifie et sais que j'ai 5 lignes
        // Une ligne contient 5 elements, plus simple que si 241
        float mat[5][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};
     
        // Recuperation des donnees
        while( 1 )
        {
            if( (ret = fscanf(fic, "%f", &tmp)) != 1 )
            {
                puts("Que s'est il passe ?");
     
                if( feof(fic) )
                    printf("Fin du fichier atteinte : erreur 'normale'");
                else if( ferror(fic) )
                    printf("Erreur de lecture : probleme avec le fichier");
                else
                    printf("Erreur de conversion : le fichier ne contient pas que des flottants");
     
                break; // Terminer la boucle while(1)
            }
            else
            {
                mat[ligne][col++] = tmp;
            }
     
            if( col == 5)
            {
                // on connait la taille d'une ligne donc pas la peine de detecter un '\n'
                col = 0;
                ligne++;
            }
        }
     
        // Affichage
        puts("\n\n");
        for(ligne=0; ligne<5; ligne++)
        {
            for(col=0; col<5; col++)
            {
                printf("| %3.3f |", mat[ligne][col]);
            }
            putchar('\n');
        }
     
        fclose(fic);
        return 0;
    }
    Je teste sur un fichier comme ceci :
    06.1 00.3 00.72 00.0 01.2
    06 00.23 00 00 02.5

    06 00 00 00.67 03
    06 00 00.45 00 04



    a 00 0.751 00 05
    Le fichier est correctement chargé et les lignes vides sont correctement évitées. Ce n'est pas le cas de granbapt, certes, mais ca montre la force des fonctions de la famille de scanf. Au passage, je recommande ce magnifique article sur scanf : http://xrenault.developpez.com/tutoriels/c/scanf/

  6. #6
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonjour,

    Citation Envoyé par granbapt Voir le message
    Elijha, je n'ai pas très bien compris tes remarques sur la nécessité de tester le retour et sur la syntaxe du while.
    Le test du retour du fscanf est important dans le sens que tu pourras déterminer si la valeur dans tmp est bonne ou pas.
    Dans ton cas, si le fscanf retourne une valeur 0 (erreur d'interprétation des caractères du fichier ou autre) tu ne sais pas ce que contient la variable tmp.

    Fait un test: Dans ton fichier texte, modifie une valeur par une chaine de caractères et observe la réaction de ton programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Avant: 2.096  1.254  2.096  2.096  2.096  2.096  2.096
    Après: 2.096  1.254  X.XXX  2.096  2.096  2.096  2.096
    A la lecture de "X.XXX" fscanf va sortir une erreur et retourner 0 car "X.XXX" n'est pas au format "%f"
    De plus tmp (donc ton tableau) contiendra la valeur précédente puisque fscanf à aborté.
    Dans ce cas, il faut prévenir l'utilisateur que le fichier est corrompu et sortir du programme.

    (arff, grillé sur la ligne d'arrivé par Bktero )

    Bonne continuation
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Super ! Merci à vous deux pour les conseils et explications.

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

Discussions similaires

  1. [AC-2003] extraire des données d'un fichier txt en VBa
    Par afifaNancy dans le forum VBA Access
    Réponses: 8
    Dernier message: 24/04/2012, 16h41
  2. Extraire des données d'un fichier txt dans un vecteur
    Par sam14 dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 22/02/2012, 12h56
  3. [Débutant] Besoin d'extraire des données d'un fichier txt
    Par Paul.R dans le forum MATLAB
    Réponses: 24
    Dernier message: 09/12/2009, 18h20
  4. Extraire des données d'un fichier .txt
    Par carlou135 dans le forum C++
    Réponses: 3
    Dernier message: 18/02/2008, 16h55
  5. Réponses: 7
    Dernier message: 29/09/2005, 10h19

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