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 :

Scission d'un fichier texte


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 33
    Par défaut Scission d'un fichier texte
    Bonjour,
    je voudrais couper un fichier texte en deux.
    par exemple pour un fichier qui contient 200 lignes, je veux avoir deux fichiers qui contiennent chacun 100 lignes. Existe t il une commande prête qui le fait?
    Merci pour votre aide!

  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 317
    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 317
    Par défaut
    MATLAB n'est certainement pas le meilleur outil pour faire ce genre d'opération.
    Mais bon, admettons que l'on souhaite couper le fichier suivant (data.txt) en deux :
    1
    2
    3
    4
    5
    6
    Voici la méthode la plus efficace (sauf si le fichier fait plusieurs centaines de Mo) :
    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
    fid=fopen('data.txt','r');
       X=fread(fid,[1,inf]);
    fclose(fid);
     
    idx=findstr(X,[13 10]); % Recherche des caractères de retour à la ligne
     
    numLigne=3; % Numéro de la ligne après laquelle on souhaite couper
     
    fid=fopen('subdata1.txt','w');
        fwrite(fid,X(1:idx(numLigne)-1));
    fclose(fid);
     
    fid=fopen('subdata2.txt','w');
        fwrite(fid,X(idx(numLigne)+2:end));
    fclose(fid);
     
    edit data.txt
    edit subdata1.txt
    edit subdata2.txt
    Bien sûr, c'est l'idée qui est présentée ici.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Note : on peut facilement automatiser la recherche de la ligne de coupure pour obtenir deux fichiers de tailles identiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numLigne=ceil(numel(idx)/2);

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 33
    Par défaut
    Bonjour Dut,
    merci de ta réponse, malheureusement elle ne fonctionne pas avec mes fichiers, en effets j'ai affaire à des fichiers de très grande taille ( 400 mégas et plus), quand j'exécute le code que tu m'as posté le message "out of memory" s'affiche
    n'y a t il pas d'autres façons de faire?
    Merci!!
    Citation Envoyé par Dut Voir le message
    MATLAB n'est certainement pas le meilleur outil pour faire ce genre d'opération.
    C'est quoi le meilleur outil? Merci!

  5. #5
    Membre émérite
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Par défaut
    Salut,

    Essaie d'utiliser la fonction textscan.

    a+

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par Wassim123 Voir le message
    le message "out of memory" s'affiche
    As-tu lu la FAQ à ce sujet ?
    Out of memory. Type HELP MEMORY for your options.
    Citation Envoyé par Wassim1
    C'est quoi le meilleur outil?
    Un langage de plus bas niveau... depuis MATLAB, je dirais PERL car il est possible d'appeler directement les scripts PERL depuis MATLAB.

    Ensuite, si la rapidité du code n'est pas essentielle, il est toujours possible d'utiliser des structures itératives FOR-END pour éviter le "Out of Memory".

  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 317
    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 317
    Par défaut
    Pour informations, voici la version qui évite le "Out of Memory" sous MATLAB :
    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
    fid=fopen('data.txt','rt');
        nLignes=0;
        while ~feof(fid)
            fgetl(fid);
            nLignes=nLignes+1;
        end
    fclose(fid);
     
    fid=fopen('data.txt','rt');
     
        subfid=fopen('subdata1.txt','wt');
        for n=1:nLignes/2
            str=fgets(fid);
            fprintf(subfid,'%s',str);
        end
        fclose(subfid);
     
        subfid=fopen('subdata2.txt','wt');
        for n=nLignes/2+1:nLignes
            str=fgets(fid);
            fprintf(subfid,'%s',str);
        end
        fclose(subfid);
     
    fclose(fid);
     
    edit data.txt
    edit subdata1.txt
    edit subdata2.txt
    Après, au niveau rapidité...

    Note
    : il est tout à fait possible de mixer cette solution avec TEXTSCAN comme l'a mentionné rostomus, afin d'écrire les nouveaux fichiers par morceaux de plusieurs lignes plutôt que ligne par ligne.

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

Discussions similaires

  1. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57
  2. Réponses: 1
    Dernier message: 12/02/2003, 09h36
  3. [VB6] Ecrire/Modifier/Effacer ds un fichier text-4 Chs/Lg
    Par Jonathan_Korvitch dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 24/12/2002, 18h54
  4. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 13h56
  5. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17

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