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

MATLAB Discussion :

Lecture d'un fichier à partir d'une séquence de chiffre donnée


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Lecture d'un fichier à partir d'une séquence de chiffre donnée
    Bonjour à toutes et à tous,

    Je suis nouveau ici, relativement novice en MATLAB, et je sollicite votre aide, qui je suis sur me sera précieuse.

    Je cherche à analyser des données météorologiques disponibles sur le site du NOAA, à partir de fichiers assez volumineux et franchement indigestes.

    J'aimerai commencer à remplir une matrice à partir d'une séquence de chiffre donnée. (par exemple : le fichier commence en 1943, et je souhaite démarrer mon analyse plus tard)

    Est-ce que vous connaissez donc un outil, une fonction, qui permettrait de dire à MATLAB : "quand tu lis le fichier .txt, tu commenceras à remplir la matrice prévue dès que tu rencontre la suite de chiffre suivante : "1976 01 01 00" (1er Janvier 1976 à 00Z)" ?

    un lien vers le serveur NOAA :

    ftp://ftp.ncdc.noaa.gov/pub/data/igra/data/data-por/

    Merci beaucoup d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par Djozef1203 Voir le message
    un lien vers le serveur NOAA :
    Avec lequel de ces fichiers travailles-tu ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je travaille en prenant pour exemple la Station de Payerne (Suisse)

    Nommée "SZM00006610-data.txt" et disponible sur ftp://ftp.ncdc.noaa.gov/pub/data/igra/data/data-por/

    (gaffe au téléchargement, une fois dézippé, il fait 207Mo de taille !)

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Voici déjà comment procéder pour se rendre au premier bloc de données recherché :

    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
    dat = [1976 01 01 00];
     
    exit_flag = false;
     
    fid =  fopen('SZM00006610-data.txt', 'r');
     
    while 1
     
        if feof(fid) || exit_flag
            break
        end
     
        H = textscan(fid, '%s%d%d%d%d%d%d%s%s%d%d', 1);
        X = textscan(fid, '%51s', H{7}, 'delimiter', '');
     
        if H{2}==dat(1) && H{3}==dat(2) && H{4}==dat(3) && H{5}==dat(4)
            exit_flag = true;
        end
     
    end
     
    fclose(fid);
    Ce qui renvoi bien :

    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
    >> H
    H = 
      Columns 1 through 9
        {1x1 cell}    [1976]    [1]    [1]    [0]    [9999]    [43]    {1x1 cell}    {1x1 cell}
      Columns 10 through 11
        [69425]    [0]
    >> X{1}
    ans = 
        '21 -9999  96800B  501   -21B-9999     0 -9999 -8888'
        '20 -9999  94800   666B  -37B-9999     0 -9999 -9999'
        '20 -9999  91600   942B   40B-9999    34 -9999 -9999'
        '20 -9999  90800  1009B-9999 -9999 -9999   230   123'
        '20 -9999  85700  1481B   10B-9999    38 -9999 -9999'
        '20 -9999  85400  1496B-9999 -9999 -9999   235   144'
        '10 -9999  85000  1534B    4B-9999    35   235   144'
        '20 -9999  82600  1776B  -11B-9999    17 -9999 -9999'
        '20 -9999  81200  1912B  -23B-9999    34 -9999 -9999'
        '20 -9999  80000  2014B-9999 -9999 -9999   235   159'
        '20 -9999  79600  2071B  -17B-9999    80 -9999 -9999'
        '20 -9999  71100  2964B  -53B-9999   220 -9999 -9999'
        '10 -9999  70000  3074B  -61B-9999   200   255   139'
        '20 -9999  68400  3266B  -77B-9999   170 -9999 -9999'
        '20 -9999  64500  3721B  -99B-9999   210 -9999 -9999'
        '20 -9999  60000  4245B-9999 -9999 -9999   270   149'
        '20 -9999  59900  4288B -129B-9999   160 -9999 -9999'
        '10 -9999  50000  5630B -237B-9999   160   275    67'
        '20 -9999  41700  6941B -333B-9999   160 -9999 -9999'
        '20 -9999  40900  7078B -331B-9999   160 -9999 -9999'
        '10 -9999  40000  7220B -345B-9999   150   335    30'
        '20 -9999  35300  8096B -411B-9999   150 -9999 -9999'
        '10 -9999  30000  9160B -515B-9999    90   350   128'
        '20 -9999  28600  9488B -537B-9999    80 -9999 -9999'
        '10 -9999  25000 10320B -613B-9999   100   350   139'
        '22 -9999  21100 11379B -681B-9999   100   305    82'
        '20 -9999  20600 11523B -679B-9999    80 -9999 -9999'
        '10 -9999  20000 11680B -685B-9999   100   310   113'
        '20 -9999  19100 11976B -697B-9999 -9999 -9999 -9999'
        '20 -9999  15500 13240B -635B-9999 -9999 -9999 -9999'
        '10 -9999  15000 13420B -643B-9999 -9999   295   154'
        '20 -9999  11900 14865B -629B-9999 -9999 -9999 -9999'
        '20 -9999  10400 15690B -657B-9999 -9999 -9999 -9999'
        '10 -9999  10000 15900B -653B-9999 -9999   295   175'
        '10 -9999   7000 18070B -671B-9999 -9999   280   242'
        '20 -9999   6700 18354B -669B-9999 -9999 -9999 -9999'
        '10 -9999   5000 20100B -655B-9999 -9999   270   247'
        '20 -9999   3030 23161B -679B-9999 -9999 -9999 -9999'
        '10 -9999   3000 23190B -675B-9999 -9999   270   355'
        '20 -9999   2430 24371B-9999 -9999 -9999   280   381'
        '10 -9999   2000 25640B -647B-9999 -9999 -9999 -9999'
        '10 -9999   1000 29950B -561B-9999 -9999 -9999 -9999'
        '20 -9999    790 31512B -543B-9999 -9999 -9999 -9999'
    Maintenant, si tu veux lire du bloc cherché jusqu'à un deuxième bloc :

    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
    start_date = [1976 01 01 00];
    end_date   = [1993 05 16 23];
     
    start_flag = false;
    end_flag = false;
     
    fid =  fopen('SZM00006610-data.txt', 'r');
     
    while 1
     
        if feof(fid) || (start_flag && end_flag)
            break
        end
     
        H = textscan(fid, '%s%d%d%d%d%d%d%s%s%d%d', 1);
        X = textscan(fid, '%51s', H{7}, 'delimiter', '');
     
        if H{2}==start_date(1) && H{3}==start_date(2) && H{4}==start_date(3) && H{5}==start_date(4)
            start_flag = true;
        end
        if H{2}==end_date(1) && H{3}==end_date(2) && H{4}==end_date(3) && H{5}==end_date(4)
            end_flag = true;
        end
     
    end
     
    fclose(fid);
    Reste maintenant à savoir qu'elles sont les valeurs de 21 -9999 96800B 501 -21B-9999 0 -9999 -8888 que tu cherches à stocker et surtout comment gérer les lettres A et B qui apparaissent dans certaines lignes…
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Waw, merci infiniment pour ce coup de main !

    je teste ça immédiatement et te répondrai plus précisément sur le traitement des -9999 et des A et B !

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Effectivement, cela fonctionne super bien.

    Je me suis permis d'y ajouter un tic au début, et le temps de calcul est élevé (une minute environ), je pense que cela vient de mon laptop qui commence gentiment à se faire vieux !

    L'idée est de choper et d'extraire toutes les données de pression, d'altitude géopotentielle et de température pour chaque lancer. La pression (en Pascal) est la 3ème colonne, l'altitude géopotentielle (en mètres) la 4ème, et la température (en dixièmes de degrés) est la 5ème.

    Auparavant, j'avais sélectionné un radiosondage au hasard pour me familiariser avec MATLAB, et j'avais réussi a obtenir cela :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    clear all
     
    filename = 'C:\Users\Joseph\Desktop\PAYERNE1LANCER.txt'; %vérification du bon chemin d'accès !
    delimiter = {'B-9999',' ','B','A'};
     
    formatSpec = '%s%s%s%s%s%[^\n\r]';
     
    fileID = fopen(filename,'r');
     
    dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'MultipleDelimsAsOne', true,  'ReturnOnError', false);
     
    fclose(fileID);
     
    raw = repmat({''},length(dataArray{1}),length(dataArray)-1);
    for col=1:length(dataArray)-1
        raw(1:length(dataArray{col}),col) = dataArray{col};
    end
    numericData = NaN(size(dataArray{1},1),size(dataArray,2));
     
    for col=[1,2,3,4,5]
     
        rawData = dataArray{col};
        for row=1:size(rawData, 1);
     
            regexstr = '(?<prefix>.*?)(?<numbers>([-]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)';
            try
                result = regexp(rawData{row}, regexstr, 'names');
                numbers = result.numbers;
     
                invalidThousandsSeparator = false;
                if any(numbers==',');
                    thousandsRegExp = '^\d+?(\,\d{3})*\.{0,1}\d*$';
                    if isempty(regexp(thousandsRegExp, ',', 'once'));
                        numbers = NaN;
                        invalidThousandsSeparator = true;
                    end
                end
     
                if ~invalidThousandsSeparator;
                    numbers = textscan(strrep(numbers, ',', ''), '%f');
                    numericData(row, col) = numbers{1};
                    raw{row, col} = numbers{1};
                end
            catch me
            end
        end
    end
     
    R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),raw);
    raw(R) = {NaN};
     
     
    NUMSTATIONLVL = cell2mat(raw(:, 1));
    sizeNUMSTATIONLVL = size(NUMSTATIONLVL);
    NUMSTATIONLVL(isnan(NUMSTATIONLVL)|NUMSTATIONLVL==-9999)= 0;
     
    TIMEELPSDTIME = cell2mat(raw(:, 2));
    sizeTIMEELPSDTIME = size(TIMEELPSDTIME);
    TIMEELPSDTIME(isnan(TIMEELPSDTIME)|TIMEELPSDTIME==-9999)= NaN;
     
    MONTHPRESSURE = cell2mat(raw(:, 3));
    sizeMONTHPRESSURE = size(MONTHPRESSURE);
    MONTHPRESSURE(isnan(MONTHPRESSURE)|MONTHPRESSURE==-9999)= 0;
     
    DAYGPH = cell2mat(raw(:, 4));
    sizeDAYGPH = size(DAYGPH);
    DAYGPH(isnan(DAYGPH)|DAYGPH==-9999)= NaN;
     
    HOURTEMPERATURE = cell2mat(raw(:, 5));
    sizeHOURTEMPERATURE = size(HOURTEMPERATURE);
    HOURTEMPERATURE(isnan(HOURTEMPERATURE)|HOURTEMPERATURE==-9999)= 0;
     
    MINITIALE=[NUMSTATIONLVL,TIMEELPSDTIME,MONTHPRESSURE,DAYGPH,HOURTEMPERATURE];
     
    clearvars filename delimiter formatSpec fileID dataArray ans raw col numericData rawData row regexstr result numbers invalidThousandsSeparator thousandsRegExp me R;
    J'obtenais comme résultat :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    MINITIALE =
     
            6610        2017           9          24          12
              21         NaN       96300         188         120
              20         NaN       96000         NaN           0
              20         NaN       95800         NaN         176
              20         NaN       95400         NaN           0
              10         NaN       92500         834         150
              20         NaN       91400         NaN           0
              20         NaN       89100         NaN         118
              20         NaN       87500         NaN           0
              20         NaN       87300         NaN         102
              20         NaN       86900         NaN          98
              20         NaN       86800         NaN          96
              20         NaN       86100         NaN         100
              20         NaN       85900         NaN           0
              10         NaN       85000        1541          94
              20         NaN       84700         NaN          92
              20         NaN       83100         NaN           0
              20         NaN       81500         NaN           0
              20         NaN       81400         NaN          74
              20         NaN       80400         NaN           0
              20         NaN       78700         NaN           0
              20         NaN       77500         NaN           0
              20         NaN       76000         NaN           0
              20         NaN       75900         NaN          38
              20         NaN       75700         NaN          36
              20         NaN       75200         NaN          32
              20         NaN       74600         NaN          26
              20         NaN       73100         NaN          10
              20         NaN       71100         NaN           0
              20         NaN       70900         NaN         -11
              10         NaN       70000        3118         -19
              20         NaN       68600         NaN           0
              20         NaN       67300         NaN         -51
              20         NaN       67200         NaN         -51
              20         NaN       66300         NaN         -53
              20         NaN       65800         NaN           0
              20         NaN       65100         NaN         -63
              20         NaN       65000         NaN         -63
              20         NaN       64200         NaN         -59
              20         NaN       63600         NaN         -63
              20         NaN       62900         NaN         -63
              20         NaN       62600         NaN           0
              20         NaN       60400         NaN           0
              20         NaN       58400         NaN        -107
              20         NaN       56300         NaN        -109
              20         NaN       55300         NaN           0
              20         NaN       52400         NaN        -141
              10         NaN       50000        5720        -169
              20         NaN       48800         NaN           0
              20         NaN       43700         NaN        -235
              20         NaN       43400         NaN        -239
              20         NaN       40900         NaN        -273
              20         NaN       40400         NaN           0
              10         NaN       40000        7350        -285
              20         NaN       39200         NaN        -297
              20         NaN       38800         NaN        -303
              20         NaN       36800         NaN        -329
              20         NaN       36000         NaN           0
              20         NaN       35300         NaN        -337
              20         NaN       35000         NaN        -337
              20         NaN       32900         NaN        -375
              20         NaN       31800         NaN        -391
              20         NaN       30700         NaN        -409
              10         NaN       30000        9360        -421
              20         NaN       29800         NaN        -423
              20         NaN       28800         NaN        -443
              20         NaN       28200         NaN        -447
              20         NaN       25400         NaN        -497
              10         NaN       25000       10570        -507
              20         NaN       22800         NaN        -555
              20         NaN       21500         NaN        -567
              20         NaN       21300         NaN        -551
              20         NaN       20900         NaN        -549
              10         NaN       20000       12000        -571
              20         NaN       19800         NaN        -577
              20         NaN       19200         NaN           0
              22         NaN       19000         NaN        -591
              20         NaN       18300         NaN        -571
              20         NaN       18000         NaN        -575
              20         NaN       17100         NaN           0
              20         NaN       16500         NaN        -583
              20         NaN       15600         NaN        -555
              20         NaN       15300         NaN           0
              10         NaN       15000       13810        -555
              20         NaN       14300         NaN        -557
              20         NaN       14000         NaN           0
              20         NaN       13600         NaN        -571
              20         NaN       12500         NaN        -547
              20         NaN       12200         NaN           0
              20         NaN       11300         NaN        -581
              20         NaN       10300         NaN           0
              10         NaN       10000       16390        -555
              20         NaN        9540         NaN           0
              20         NaN        9220         NaN           0
              20         NaN        8780         NaN           0
              20         NaN        8010         NaN        -549
              20         NaN        7050         NaN        -573
              10         NaN        7000       18660        -569
              20         NaN        6030         NaN        -547
              20         NaN        5730         NaN           0
              20         NaN        5630         NaN        -557
              20         NaN        5460         NaN        -573
              20         NaN        5440         NaN           0
              10         NaN        5000       20800        -557
              20         NaN        4910         NaN        -551
              20         NaN        4860         NaN           0
              20         NaN        4500         NaN        -571
              20         NaN        4170         NaN        -539
              20         NaN        3830         NaN        -551
              20         NaN        3290         NaN           0
              20         NaN        3230         NaN        -547
              20         NaN        3050         NaN        -557
              10         NaN        3000       24060        -555
              20         NaN        2780         NaN           0
              20         NaN        2760         NaN        -543
              20         NaN        2640         NaN        -553
              20         NaN        2590         NaN           0
              20         NaN        2510         NaN        -529
              20         NaN        2470         NaN           0
              20         NaN        2340         NaN        -523
              10         NaN        2000       26660        -553
              20         NaN        1980         NaN        -553
              20         NaN        1890         NaN        -533
              20         NaN        1790         NaN        -539
              20         NaN        1630         NaN        -509
              20         NaN        1460         NaN        -503
              20         NaN        1420         NaN        -513
              20         NaN        1350         NaN           0
              20         NaN        1270         NaN        -477
              20         NaN        1180         NaN        -493
              20         NaN        1020         NaN        -481
              10         NaN        1000       31180        -467
              20         NaN         910         NaN           0
              20         NaN         900         NaN        -479
              20         NaN         850         NaN        -463
              20         NaN         830         NaN           0
              20         NaN         800         NaN        -471
              20         NaN         780         NaN        -453
              10         NaN         700         NaN        -433
              20         NaN         660         NaN        -407

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Je ne sais pas si ça correspond exactement à ce que tu cherchais mais voici une idé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
    25
    26
    27
    28
    29
    30
    31
    32
    clc
     
    dat = [2017 09 24 12];
     
    exit_flag = false;
     
    fid =  fopen('SZM00006610-data.txt', 'r');
     
    while 1
     
        if feof(fid) || exit_flag
            break
        end
     
        H = textscan(fid, '%s%d%d%d%d%d%d%s%s%d%d', 1);
        X = textscan(fid, '%51s', H{7}, 'delimiter', '');
     
        if H{2}==dat(1) && H{3}==dat(2) && H{4}==dat(3) && H{5}==dat(4)
            exit_flag = true;
        end
     
    end
     
    fclose(fid);
     
    C = strrep(X{1}, 'B', ' ');
    C = strrep(C, 'A', ' ');
    C = strrep(C, '-9999', '  NaN');
     
    MINITIALE = str2num(char(C));
     
    MINITIALE = MINITIALE(:, [1 2 3 5 7])
    Ce qui renvoi :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    MINITIALE =
              21         NaN       96300         188         120
              20         NaN       96000         NaN         NaN
              20         NaN       95800         176         120
              20         NaN       95400         NaN         NaN
              10         NaN       92500         150          90
              20         NaN       91400         NaN         NaN
              20         NaN       89100         118          70
              20         NaN       87500         NaN         NaN
              20         NaN       87300         102          90
              20         NaN       86900          98          70
              20         NaN       86800          96          70
              20         NaN       86100         100         150
              20         NaN       85900         NaN         NaN
              10         NaN       85000          94         210
              20         NaN       84700          92         240
              20         NaN       83100         NaN         NaN
              20         NaN       81500         NaN         NaN
              20         NaN       81400          74         400
              20         NaN       80400         NaN         NaN
              20         NaN       78700         NaN         NaN
              20         NaN       77500         NaN         NaN
              20         NaN       76000         NaN         NaN
              20         NaN       75900          38         390
              20         NaN       75700          36         380
              20         NaN       75200          32         300
              20         NaN       74600          26         150
              20         NaN       73100          10          90
              20         NaN       71100         NaN         NaN
              20         NaN       70900         -11          80
              10         NaN       70000         -19          90
              20         NaN       68600         NaN         NaN
              20         NaN       67300         -51          80
              20         NaN       67200         -51          80
              20         NaN       66300         -53         130
              20         NaN       65800         NaN         NaN
              20         NaN       65100         -63         110
              20         NaN       65000         -63         110
              20         NaN       64200         -59         220
              20         NaN       63600         -63         140
              20         NaN       62900         -63         180
              20         NaN       62600         NaN         NaN
              20         NaN       60400         NaN         NaN
              20         NaN       58400        -107         180
              20         NaN       56300        -109         250
              20         NaN       55300         NaN         NaN
              20         NaN       52400        -141         280
              10         NaN       50000        -169         250
              20         NaN       48800         NaN         NaN
              20         NaN       43700        -235         250
              20         NaN       43400        -239         240
              20         NaN       40900        -273         160
              20         NaN       40400         NaN         NaN
              10         NaN       40000        -285         170
              20         NaN       39200        -297         170
              20         NaN       38800        -303         250
              20         NaN       36800        -329         260
              20         NaN       36000         NaN         NaN
              20         NaN       35300        -337         240
              20         NaN       35000        -337         220
              20         NaN       32900        -375          80
              20         NaN       31800        -391         100
              20         NaN       30700        -409          60
              10         NaN       30000        -421          90
              20         NaN       29800        -423         100
              20         NaN       28800        -443          80
              20         NaN       28200        -447          90
              20         NaN       25400        -497         100
              10         NaN       25000        -507         110
              20         NaN       22800        -555         100
              20         NaN       21500        -567         110
              20         NaN       21300        -551         120
              20         NaN       20900        -549         140
              10         NaN       20000        -571         140
              20         NaN       19800        -577         140
              20         NaN       19200         NaN         NaN
              22         NaN       19000        -591         170
              20         NaN       18300        -571         180
              20         NaN       18000        -575         200
              20         NaN       17100         NaN         NaN
              20         NaN       16500        -583         280
              20         NaN       15600        -555         290
              20         NaN       15300         NaN         NaN
              10         NaN       15000        -555         290
              20         NaN       14300        -557         290
              20         NaN       14000         NaN         NaN
              20         NaN       13600        -571         280
              20         NaN       12500        -547         290
              20         NaN       12200         NaN         NaN
              20         NaN       11300        -581         270
              20         NaN       10300         NaN         NaN
              10         NaN       10000        -555         280
              20         NaN        9540         NaN         NaN
              20         NaN        9220         NaN         NaN
              20         NaN        8780         NaN         NaN
              20         NaN        8010        -549         280
              20         NaN        7050        -573         270
              10         NaN        7000        -569         270
              20         NaN        6030        -547         280
              20         NaN        5730         NaN         NaN
              20         NaN        5630        -557         270
              20         NaN        5460        -573         260
              20         NaN        5440         NaN         NaN
              10         NaN        5000        -557         280
              20         NaN        4910        -551         280
              20         NaN        4860         NaN         NaN
              20         NaN        4500        -571         270
              20         NaN        4170        -539         290
              20         NaN        3830        -551         260
              20         NaN        3290         NaN         NaN
              20         NaN        3230        -547         270
              20         NaN        3050        -557         260
              10         NaN        3000        -555         270
              20         NaN        2780         NaN         NaN
              20         NaN        2760        -543         270
              20         NaN        2640        -553         270
              20         NaN        2590         NaN         NaN
              20         NaN        2510        -529         280
              20         NaN        2470         NaN         NaN
              20         NaN        2340        -523         280
              10         NaN        2000        -553         260
              20         NaN        1980        -553         260
              20         NaN        1890        -533         270
              20         NaN        1790        -539         260
              20         NaN        1630        -509         280
              20         NaN        1460        -503         280
              20         NaN        1420        -513         270
              20         NaN        1350         NaN         NaN
              20         NaN        1270        -477         290
              20         NaN        1180        -493         280
              20         NaN        1020        -481         280
              10         NaN        1000        -467         290
              20         NaN         910         NaN         NaN
              20         NaN         900        -479         280
              20         NaN         850        -463         290
              20         NaN         830         NaN         NaN
              20         NaN         800        -471         290
              20         NaN         780        -453         310
              10         NaN         700        -433         300
              20         NaN         660        -407         320
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Yes !!

    Merci beaucoup beaucoup, j'ai modifié deux trois trucs pour sélectionner les bonnes données, et enlever les lignes ou un NaN se trouverai dans la température, et ça me donne un truc comme ça :

    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
    tic;
     
    clear all
     
    dat = [2017 09 24 12];
     
    exit_flag = false;
     
    fid =  fopen('SZM00006610-data.txt', 'r');
     
    while 1
     
        if feof(fid) || exit_flag
            break
        end
     
        H = textscan(fid, '%s%d%d%d%d%d%d%s%s%d%d', 1);
        X = textscan(fid, '%51s', H{7}, 'delimiter', '');
     
        if H{2}==dat(1) && H{3}==dat(2) && H{4}==dat(3) && H{5}==dat(4)
            exit_flag = true;
        end
     
    end
     
    fclose(fid);
     
    C = strrep(X{1}, 'B', ' ');
    C = strrep(C, 'A', ' ');
    C = strrep(C, '-9999', '0');
     
    MINITIALE = str2num(char(C));
     
    MINITIALE = MINITIALE(:, [3 5]);
     
    for i=size(MINITIALE,1):-1:1
        if all(MINITIALE(i,:))==0
            MINITIALE(i,:)=[];
        end
    end
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    MINITIALE =
     
           96300         188
           95800         176
           92500         150
           89100         118
           87300         102
           86900          98
           86800          96
           86100         100
           85000          94
           84700          92
           81400          74
           75900          38
           75700          36
           75200          32
           74600          26
           73100          10
           70900         -11
           70000         -19
           67300         -51
           67200         -51
           66300         -53
           65100         -63
           65000         -63
           64200         -59
           63600         -63
           62900         -63
           58400        -107
           56300        -109
           52400        -141
           50000        -169
           43700        -235
           43400        -239
           40900        -273
           40000        -285
           39200        -297
           38800        -303
           36800        -329
           35300        -337
           35000        -337
           32900        -375
           31800        -391
           30700        -409
           30000        -421
           29800        -423
           28800        -443
           28200        -447
           25400        -497
           25000        -507
           22800        -555
           21500        -567
           21300        -551
           20900        -549
           20000        -571
           19800        -577
           19000        -591
           18300        -571
           18000        -575
           16500        -583
           15600        -555
           15000        -555
           14300        -557
           13600        -571
           12500        -547
           11300        -581
           10000        -555
            8010        -549
            7050        -573
            7000        -569
            6030        -547
            5630        -557
            5460        -573
            5000        -557
            4910        -551
            4500        -571
            4170        -539
            3830        -551
            3230        -547
            3050        -557
            3000        -555
            2760        -543
            2640        -553
            2510        -529
            2340        -523
            2000        -553
            1980        -553
            1890        -533
            1790        -539
            1630        -509
            1460        -503
            1420        -513
            1270        -477
            1180        -493
            1020        -481
            1000        -467
             900        -479
             850        -463
             800        -471
             780        -453
             700        -433
             660        -407
     
    >>
    Merci infiniement pour l'aide

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Tu peux remplacer la dernière boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=size(MINITIALE,1):-1:1
        if all(MINITIALE(i,:))==0
            MINITIALE(i,:)=[];
        end
    end
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idx  = MINITIALE(:,2)==0;
    MINITIALE(idx,:) = [];
    Voir la FAQ : Qu'est-ce que l'indexage logique ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/06/2010, 12h36
  2. compresser un fichier à partir d'une application
    Par Julian21 dans le forum C++
    Réponses: 6
    Dernier message: 20/06/2007, 22h32
  3. Réponses: 4
    Dernier message: 01/12/2005, 01h01
  4. Copier un fichier à partir d'une URL ?
    Par oulahoup dans le forum ASP
    Réponses: 2
    Dernier message: 18/08/2005, 21h52
  5. [SERVLET]Appel d'un fichier à partir d'une servlet
    Par fchafia dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 17/03/2005, 12h21

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