Lire partiellement un tableau de plusieurs millions de lignes

Bonjour,
Alors voici mon problème: j'ai un fichier texte contenant un tableau de 9 colonnes et environ 15 millions de lignes. J'utilise labview pour traiter ces données, ce qui ne pose pas de problème hormis pour un point: lire partiellement le fichier sans avoir à effectuer une lecture complète, qui sature la mémoire du pc.
Par exemple, je veux extraire 1000 lignes de ce tableau, à partir de la 10 000 ème ligne.  J'ai essayé avec le sous VI: "lire un fichier tableur" mais celui-ci ne propose qu'un offset de caratère à la lecture et non un offset de lignes, et c'est compliqué de connaître simplement la relation entre le nombre de caractères et le nombre de lignes.
Donc est ce que vous auriez une autre solution pour lire paratiellement un tableau ?
Merci d'avance pour votre aide
Résolu !
Accéder à la solution.

bonjour j'ai le sentiment qu'un fichier binaire conviendrait mieux, afin d'avoir une structure d'octets fixe par ligne et de pouvoir utiliser la capacité à récupérer facilement des données  à n'importe quel endroit du fichier du fait que nous connaissons le nombre d'octets nécessaire à l'écriture d'une donnée. via " Définir la position" qui est en octet. 
Toutes les autres méthodes (sur fichier ASCII) seront consommatrices de ressource.
Un autre fichier binaire est intéressant : le fichier journal, qui est un tableau de cluster (par exemple pour vous une ligne ou un ensemble fixe de ligne = un élément du journal).
Le grand avantage de cette méthode est qu’il est très simple d’accéder en lecture à la valeur d’un des éléments du tableau (index d'un des clusteur). Il suffit uniquement de spécifier son numéro à la fonction « Définir la position dans le fichier journal LabVIEW ». En effet cette fonction travaille sur des valeurs qui sont en nombre d’enregistrement, et pas en offset d’octets comme les fonctions binaires standards. Il est ainsi plus simple d’exploiter les essais réalisés.
Mais je ne sais pas si cela est possible pour vous.
A+
Luc Desruelle | Voir mon profil | LabVIEW Code & blog
Co-auteur livre LabVIEW : Programmation et applications
CLA : Certified LabVIEW Architect / Certifié Architecte LabVIEW
CLD : Certified LabVIEW Developer / Certifié Développeur LabVIEW

Similar Messages

  • Pages : Impossible de fractionner une ligne de tableau sur plusieurs pages - Impossible to divide a row on multiple pages in a table

    ENGLISH FOLLOWS
    Avec le logiciel Pages, il est impossible de fractionner une ligne de tableau sur plusieurs pages, contrairement à Word. C'est un problème majeur. En particulier quand on veut comparer deux textes côte à côte. Si le texte est long, on ne voit que la première page. Cela devrait être corrigé. En attendant, y a-t-il une solution pour voir le texte complet?
    With Pages, it is impossible to divide the content of one row in a table on more than one page, as we can do with Word. This is a major problem. Especially when we wish to compare two texts side by side. If the text is long, we can only see the content of the first page. This should be fixed. Is there a solution?

    Thanks Picas for this direct and simple answer, even if this disappointed me
    Never mind, I have to use another app or find a "way-to", hoping this will be upgrade in a future version.
    To answer to your question :
    1st link - The french app's online help - Related Page :  "Create sections", you'll find this : "Un document peut contenir une ou plusieurs sections. Vous pouvez ajouter une section pour utiliser un format différent pour une partie du document, par exemple. Chaque section possède sa propre pagination, ses en-têtes, bas de page et image d’arrière-plan."
    I translate for you or perhaps are you french speaking ? : "A document can contain one or more sections. You can add a section to use a different format for a portion of the document, for example. Each section has its own pagination, its headers, footers, and image background."
    Perhaps I misunderstood the 2 sentences
    2nd link and others : using this google search "Mac Pages 5.2 Document section layouts"
    Reading the french online help and flying over the results of my Google searches, it seems to appear to me that it was possible, by simply choose the section in the preview and change the parameters of the chosen section.
    One more time, thanks for your time and you answer.

  • Comment faire pour diviser un tableau en plusieurs autres ?

    comment faire pour diviser un tableau en plusieurs autres ?

    Bonjour,
    Tu peux inclure tous les fichiers que tu veux, à condition qu'ils soient ajoutés à ton projet.
    Le plus simple, c'est de définir tes fichiers à inclure directement avec l'exécutable. Pour cela, il faut que tu:
    - ajoutes tes fichiers dans ton projet
    - Défini ces fichiers dans la partie "toujours inclus" de ton exécutable
    - Ajoutes un  nouveau répertoire dans les "Destinations" (afin d'organiser tes fichiers)
    - Va dans "Source File Settings" et sélectionne un des fichiers, puis dans le menu déroulant "destinations" à droite, change le "same to caller" par le répertoire que tu viens de créer (si tu veux que le fichier soit placé dans ce répertoire), fais de même pour tous les fichiers que tu as rajouté.
    Voila, tes fichiers seront automatiquement ajoutés avec ton Build dans un nouveau répertoire.
    Lors de la création de ton installeur, ces répertoires seront également ajoutés.
    Pour ce qui est de fermer ton application, suis le document ci-dessous:
    How Can I Exit From My LabVIEW Executable Without Having to Close It?
    Tu peux remplacer la structure désactivation conditionnelle par l'utilisation d'une structure condition et d'un noeud de propriété sur la classe Application, en regardant la propriété "Application Kind".
    Cordialement,
    Olivier L. | Certified LabVIEW Developer

  • Lire une valeur de la cellule d'une ligne

    bonjour les amis 
    je veux savoir les noms de 2  fonctions de labvew:
    une 1ére qui permet de lire une ligne de mon fichier texte (données meteo)
    une 2ém qui permet à partir de cetteligne de lire une valeur d''une  cellule de la ligne
       merci de votre aide

    Hello My Friend,
    The attached example should be useful to you. We also have French forums for your convenience as well.
    Have a great day!
    David H.
    National Instruments
    Attachments:
    Tab-Delimited Data.lvproj ‏8 KB

  • Calcul sur les 2 dernières lignes d'un tableau dont le nombre de lignes croît.

    Bonjour, 
    Je voudrais effectuer un calcul (soustraction de 2 lignes consécutives) dans un tableau qui se construit au fur et à mesure d'itérations.
    A la première itération, mon tableau ne possède qu'une ligne et mon calcul n'est pas possible.
    A la 2e itération, j'ai deux lignes et je peux commencer le calcul (Ligne2 - Ligne1)
    A la 3e .... idem ((Ligne3 - Ligne2) etc.
    Ma contrainte est de toujours effectuer ce calcul sur les 2 dernières lignes. De plus, je n'arrive pas à gérer la première itération durant laquelle il ne se passe rien puisque le calcul n'est pas possible.
    Merci pour vos lumimères. 
    Manu
    Solved!
    Go to Solution.

    Bonjour ManuLab,
    est-ce que vous connaissez les registres à décalage ou encore l'auto-indexation de boucle?
    Voici en pièce jointe un VI (LabVIEW 2012) pour réaliser ce que vous souhaiter faire.
    J'espère que ceci pourra vous aider
    Cordialement,
    Audrey_P
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    Journées techniques : des fondamentaux aux dernières technologies pour la mesure et le contrôle/comm...
    Attachments:
    exemple.vi ‏12 KB

  • Lire les valeurs d'un tableau 2D

    Bonjour
    J'ai créé un tableau 2D et je souhaite lire la valeur d'une des case dans un indicateur numérique comment dois je faire ? J'y arrive avec un tableau 1D mais pas 2D j'utilisais la fonction indexer un tableau et je choisissais la ligne correspondante mais je n'y arrive pas avec un 2 D

    Je suppose que je vasi devoir utiliser la méthode à "benj" alors ! Voila ou j'en suis : 
    a quoi ressemble la seconde condition ?

  • Par défaut changer le type d'un tableau

    bonjour!
    voila une photo sur mon projet ci-joint.
    j'ai un tableau, contenant plusieurs type de donnée (colonne1 strinf, 2 reel, 3 entier), j'ai extrait la 3 em colonne dans un tableau 1D, et a partir de ce dernier, j'ai voulu faire une comparaison des element de ce tableau avec une une constante!
    le probleme c comment remplacer array- par le tableau historique! et merci 
    Pièces jointes :
    essai table alarm .vi ‏25 KB

    Bonjour,
    Avant de répondre à vos questions, je me permet quelques remarques par rapport au VI que vous venez de transmettre :
    -Les deux boucles "whiles" ne semblent pas nécessaire : vous consommez pas mal de ressource en procédant après chaque exécution de la structure "condition" à la fermeture puis l'ouverture de la base de donnée
    -Vous utilisez une variable "historique" dont je ne comprends pas l'utilité
    Pour répondre  votre question, un  tableau est une structure ordonnée d'élement du même type (ex : tableau de chaîne de caractère, tableau d'entier etc ).
    Si vous souhaitez regroupé des élements de type différents (ex : boolean avec un integer) dans uen structure ordonné afin de les comparer, vous devez utiliser un cluster assemblé par nom.
    Les VI pour les clusters se trouvent dans la palette programmation > cluster
    Afin de vous aider,  voici un VI qui compare un cluster de référence à un autre cluster dont vous pouvez faire varier les paramètres en directs.
    Cordialement
    Guillaume D

  • Plusieurs trames CAN fifo compactRio

    Bonjour à tous,
    J'utilise un compactRio 9074 avec labview 2010 et un module 9853.
    Je dois faire l'acquisition de données sur un bus CAN. Mon problème est le suivant: Lorsque je spécifie une seule trame depuis la DBC, j'obtiens les valeurs souhaitées. Mais quand je veux lire des données de plusieurs trames cela ne foncitonne plus.
    Je ne sais pas comment lire plusieurs trames au niveau du FPGA. (Dans ma fifo se trouvent uniquement les données d'une trame)
    Voir les captures d'écran jointes.
    Merci d'avance.
    Pièces jointes :
    CAN FPGA.jpg ‏91 KB
    CAN RT.jpg ‏129 KB

    I am not aware that using the Scan Engine is blocking any access to a transfer FIFO. But please reread this from your quoted KB:
    Secondly, the number of DMA FIFO's that can be used in the FPGA code will be reduced, since the scan engine uses two DMA FIFO's. Most FPGAs have 3 DMA FIFO's, so there will only be one DMA channel left to use in the FPGA code.
    This means, you have only a single DMA FIFO left which is either Target to Host or Host to Target.
    Make sure that you configured the FIFO to be the correct direction for your needs...
    hope this helps,
    Norbert
    CEO: What exactly is stopping us from doing this?
    Expert: Geometry
    Marketing Manager: Just ignore it.

  • Creation des tableau à deux dimension sur labview

    Bonjour,
    Je suis en stage dans une boite où je fais de l'acquisition de donnés dur Labview mais je découvre encore ce logiciel. J'ai rencontré un petit problème dans ma programmation :/ c'est le suivant: Je fais de l'acquisition des données via la sortie analogique d'un boitier "USB 1208ls" connecté à un inclinomètre et relié à mon ordinateur via un cable USB!! Sur mon programme labview je réussi à visualisé les valeurs de la tension de l'inclinomètre transmises par le boitier. Mais vu que à chaque valeur de tension correspond un angle d'inclinaison j'aimerais Créer un tableau 2 colonnes et n lignes où je mettrais les valeurs de tension dans la première colonne et des angles correspondante dans la deuxième colonne!! De manière à récupéré les tension à la sortie de mon VIs (aplitude and level measurements) et les angles à la sortie de la fonction Arcsinus que j'ai crée!! voilà je vous remercie d'avance pour vos éventuelles réponses

    En fait j'ai pas un tableau qui contient les valeurs de la tension et de l'angle mais deux tableaux 1 D. Aussi quand je relie l'entrée de la fonction built array au reistre situé à gauhe j'ai une erreur. j'ai jointdeux image d'avant la connexion et après .
    merci.
    Pièces jointes :
    avant.PNG ‏36 KB
    après.PNG ‏36 KB

  • Supprimer certaines lignes d'un tableau

    Bonjour à tous,
    J'avance petit à petit mais un problème auquel je n'avais pas pensé survient.
    Voila : je me retrouve avec un tableau de coordonnées x et y (tableau 2 colonnes avec un nombre de  lignes variables). 
    Certaines lignes contiennent en coordonées y la valeur 512 (2eme colonne) et je souhaite enlever toutes ces lignes afin d'obtenir un nouveau tableau purger de ces lignes
    Par exemple sur la face avant jointe j'ai 2 lignes sur les 5 au totale avec la valeur 512, je souhaite en sortie de mon traitement avoir un autre tableau  avec seulement les 3 lignes restantes (et  les lignes corespondantes de la première colonne !) - cette valeur 512 est placer de facon aléatoire sur mes différentes lignes.
    j'ai fait un bout de vi, que je joint, mais cela ne fonctionne pas et je ne suis pas du tout sur d'utiliser la bonne méthode.
    ( la partie la plus à gauche me permet juste d'avoir un tableau avec des valeurs égale ou non à 512.)
    Merci de votre aide...
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    face avant.png ‏45 KB
    diagramme.png ‏13 KB
    essais purge tableau.vi ‏13 KB

    Super efficace Ouadji !
    c'est gentil ... mais après 4 ans de labview à raison de 4hrs par jour (parfois 10  )
    ce type de problème est résolu en temps réel pendant que je lis la question. (normal après 4ans)
    ceci dit ...au début .... TOUT était un problème ... j'ai du poser un bon millier de questions sur ce forum.
    donc pas d'inquiétude .... si tu pratiques LV régulièrement et si tu "en veux" ...
    ce type de problème deviendra vite un bonbon sucré  

  • Définir la taille des colonnes d'un tableau cvi et visualiser les colonnes non visibles

    Bonjour,
    j'ai deux questions sur l'utilisation de tableau 2D dans CVI :
    1. la largeur par défaut des colonnes ne permet pas de voir la valeur (float) en entier. Comment l'agrandir ?
    2. Le tableau est utilisé en visualisation d'une liste de 512 valeurs (donc 512 colonnes) qui ne sont pas toutes visibles à l'écran. j'ai mis un ascensseur horizontal, mais celui ci n'est pas actif quand le controle est grisé (à cause de l'interdiction pour modification). Comment visualiser les colonnes non visibles dans ce cas ?

    J'ai une version CVI 9.0.1
    C'est difficile de vous envoyer l'ensemble du code. j'ai utilisé un controle "Edit Table"
    Ci joint une copie d'écran qui illustre le problème :
    le tableau "Fréquence" contient une ligne "Freq" et une ligne "Chirp". les valeurs de la ligne "Freq" sont 13254 et 13125 et on voit 3254 et 3125. les valeurs de la ligne "Chirp" sont 13256 et 13398 et on voit 3256 et 3398 .
    Je n'ai pas trouvé d'attribut permettant de définir la largeur des colonnes.
    Du plus si le tableau contient plus de 8 colonnes, on ne peut pas les visualiser
    Pièces jointes :
    ecran-log.JPG ‏109 KB

  • Transposer un tableau

    bonjour,
    je voudrais transposer un tableau ou un fichier qui enregistre en : x y z (en colonne), en un tableau qui fait x en ligne puis y dans une autre puis z dans une autre ligne.
    merci.
    pour info j ai deja utilisé la fonction transposer dans le vi write mais ca ne marche pas.

    If your data is stored as text, you can use the "Spreadsheet spring to array" function with a suitable delimiter to convert to an array, then transpose it with "Transpose 2D array", and then "Array to spreadheet string" to convert back to text.
    If your data is already in a 2D array, "Transpose 2D array" should do.
    Martin

  • Labview tableau problème répétition

    Bonjour,
    Nous sommes actuellement en train de réaliser un tableau qui permet d'allumer des LED en fonction du temps et des valeurs inscrites dans ce tableau. On a x lignes dans ce tableau et nous ne savons pas a l'avance combien y en a t-il. Le principe serait de créé une fonction qui permettrait de répéter le câblage des LED par rapport au nombre de ligne. Pour mieux vous éclairé, voici ci-joint mon diagramme.
    Cordialement
    Pièces jointes :
    tableau, led et chrono2.JPG ‏46 KB

    La boucle For n'est pas necessaire, la fonction de comparaison permet directement de comparer  tous les éléments d'un tableau à une valeur unique.
    Autre chose, faites attention à la fonction "Tick Count", celle-ci renvoie la valeur d'un compteur qui tourne en permanence, ce compteur ayant une résolution de 32 bits il se remet à zéro lorsqu'il atteint la valeur 2^32-1. Si ça se produit pendant l'exécution de votre code ça fausse le calcul du temps écoulé.
    Personnellement je n'utilise jamais cette fonction, je préfère utiliser "Get Date/Time in Seconds". Si vous faites une soustraction entre deux timestamps vous obtenez directement l'écart de temps en secondes.
    Cordialement,
    Yohann L.
    Pièces jointes :
    snippet.png ‏13 KB

  • Créer une synthèse de séquence tableau/gr​aphe

    Bonjour,
    Alors voilà j'ai creer un vi qui permet d'envoyer des séquences de tests (avec NI-845x protocole SPI) et mon but est de récapituler dans un tableau 2D les trames émises(une case par octet) et en face les trames reçus associées.
    Mon problème est que j'ai une boucle de condition or quand je place mon tableau hors de la boucle le resultat s'affiche un quart de seconde, et je ne peux placer le tableau à l'interieur car je n'aurais pas les résultats de la condition"FAUX" dans mon tableau. 
    Comment faire?
    Ensuite j'aimerais qu'il y ai un graphe derière (j'ai choisis le déroulant) qui affiche les trames émises sur une courbe et les trames reçut sur une autre avec 2 autre courbes correspondant au CS et CLK , en faite ça serait de reproduire l'oscilloscope , et que mes trames soient en binaire.
    Pour celà j'avais pensé
    1)convertir en binaire toutes les cases  de mon tableau 2D
    2)Sur une ligne : mettre les valeurs de toutes les cases les unes après les autres pour mettre la valeur finale dans une case. 
    3) faire ça pour chaque ligne afin d'obtenir un tableau 1D
    puis envoyé ce tableau sur un graphe.
    exemple:
    J'espère etre un peu plus claire avec cet exemple...
    Et même pour faire ça je n'y arrive pas!
    Bon si vous avez de meilleures idées n'hésitez pas !!!
    Merci beaucoup de m'aider parce que je craque !!

    Bonjour,
    mettre deux questions dans un post n'est pas un choix judicieux : on ne sait pas à quoi répondre, et on a un peu l'impression de faire votre travail.
    De plus, poster à la fois dans la partie française (bien) et dans la partie anglaise (pas bien, et encore moins bien en français), ce n'est pas très correct vis a vis de ceux qui vont répondre : cela créera des doublons.
    Ceci étant dit, pour répondre à la première partie de votre question, je pense qu'il faudrait que vous postiez un vi simple (pas l'intégralité de votre projet avec des vi's qui necessitent google earth pour voir le diagramme en entier) qui résume votre problème.;-)
    En faisant cela, il y a de fortes chances pour que vous résolviez votre problème par vous même !
    Cordialement,
    V-F

  • Créer une synthèse de séquence tableau/graphe

    Bonjour,
    Alors voilà j'ai creer un vi qui permet d'envoyer des séquences de tests (avec NI-845x protocole SPI) et mon but est de récapituler dans un tableau 2D les trames émises(une case par octet) et en face les trames reçus associées.
    Mon problème est que j'ai une boucle de condition or quand je place mon tableau hors de la boucle le resultat s'affiche un quart de seconde, et je ne peux placer le tableau à l'interieur car je n'aurais pas les résultats de la condition"FAUX" dans mon tableau. 
    Comment faire?
    Ensuite j'aimerais qu'il y ai un graphe derière (j'ai choisis le déroulant) qui affiche les trames émises sur une courbe et les trames reçut sur une autre avec 2 autre courbes correspondant au CS et CLK , en faite ça serait de reproduire l'oscilloscope , et que mes trames soient en binaire.
    Pour celà j'avais pensé
    1)convertir en binaire toutes les cases  de mon tableau 2D
    2)Sur une ligne : mettre les valeurs de toutes les cases les unes après les autres pour mettre la valeur finale dans une case. 
    3) faire ça pour chaque ligne afin d'obtenir un tableau 1D
    puis envoyé ce tableau sur un graphe.
    exemple:
    J'espère etre un peu plus claire avec cet exemple...
    Et même pour faire ça je n'y arrive pas!
    Bon si vous avez de meilleures idées n'hésitez pas !!!
    Merci beaucoup de m'aider parce que je craque !!

    Bonjour,
    mettre deux questions dans un post n'est pas un choix judicieux : on ne sait pas à quoi répondre, et on a un peu l'impression de faire votre travail.
    De plus, poster à la fois dans la partie française (bien) et dans la partie anglaise (pas bien, et encore moins bien en français), ce n'est pas très correct vis a vis de ceux qui vont répondre : cela créera des doublons.
    Ceci étant dit, pour répondre à la première partie de votre question, je pense qu'il faudrait que vous postiez un vi simple (pas l'intégralité de votre projet avec des vi's qui necessitent google earth pour voir le diagramme en entier) qui résume votre problème.;-)
    En faisant cela, il y a de fortes chances pour que vous résolviez votre problème par vous même !
    Cordialement,
    V-F

Maybe you are looking for