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

Scilab Discussion :

Ouverture d'un fichier .txt lourd


Sujet :

Scilab

  1. #1
    Membre à l'essai
    Ouverture d'un fichier .txt lourd
    Bonjour,

    J'ai un fichier assez lourd (30 Mo) avec plus de 400 000 lignes de données. J'ai Scilab qui crash quand j'essaie de l'ouvrir. J'entends bien qu'il va mettre du temps à ouvrir ce fichier et à faire les calculs ensuite mais... Je ne pensais pas que Scilab se contenterait carrément de se fermer tout seul.

    Je précise qu'il n'y a aucun soucis sur les lignes de codes qui demandent l'ouverture du fichier puisque que l'ai essayé sur une version (89 Ko) avec 1400 lignes de données et tout était impec'. Est-ce que quelqu'un aurait une astuce pour aider Scilab à gérer l'afflux important de données ? ou alors le problème vient de la mémoire vive du PC qui sature ?

    Voilà !!!! Si quelqu'un peut m'éclairer sur la question

  2. #2
    Rédacteur/Modérateur

    Montre nous ton code ou explique nous plus en détails ce que fais ton code et les fonctions que tu utilises.
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et 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
    Membre à l'essai
    Code lecture
    Bonjour,
    Comme je dis... le code en temps que tel ne pose aucun soucis si le fichier est coupé et donc moins lourd. Je ne peux pas fournir ledit fichier tout simplement parce que ça concerne ma recherche encore non-publiée et donc... Nope! Pas de partage de fichier de ce point de vu!

    Le code lisant les données donne ceci dit le format

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DataFile=input('Give the path to the file (between inverted commas)')
    fd=mopen(string(DataFile))
    INFOS=mfscanf(1,fd,'%s %s %c %c %s %s %s %s %s %s %s %s %s\n')
    Data=mfscanf(-1,fd,'%lg %s %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg\n')
    mclose(fd)

  4. #4
    Rédacteur/Modérateur

    As-tu besoin de stocker toutes les données de chaque ligne ?

    Si ce n'est pas le cas, tu peux utiliser * pour ne pas lire les données inutiles. La quantité de mémoire nécessaire au stockage des données sera diminuée.

    Par exemple, pour ne pas lire la première valeur de chaque ligne :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Data=mfscanf(-1,fd,'%*lg %s %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg\n')


    Les calculs peuvent-ils être effectués bloc par bloc ? Si c'est le cas, tu peux lire le fichier par bloc de ligne, ce qui évitera de tout stocker en mémoire.

    Par exemple par bloc de 1000 lignes :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DataFile=input('Give the path to the file (between inverted commas)')
    fd=mopen(string(DataFile))
    INFOS=mfscanf(1,fd,'%s %s %c %c %s %s %s %s %s %s %s %s %s\n')
    while 1
       if meof(fd) then
          break
       end
       Data=mfscanf(1000,fd,'%lg %s %lg %lg %lg %lg %lg %lg %lg %lg %lg %lg\n')
       // Calcul intermédiaire avec les 1000 lignes lues
    end
    mclose(fd)
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et 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
    Membre à l'essai
    Je vais essayer
    Oh! Oui! Je peux clairement effectuer les calculs qui suivent ensuite par blocs. Je vais juste créer des fonctions pour éviter que ça devienne trop fouillis du coup mais OUI. Je n'avais pas pensé à ces solutions.

    Je vais tester ça de suite. Merci beaucoup !

###raw>template_hook.ano_emploi###