Nombre d'occurrence dans une chaîne de caractère

Bonjour,
Voila j'aimerais construire un VI permettant de me donner le nombre de fois ou je trouve le caractère que je specifie, dans une chaîne de caractère.
En vous remerciant.
Cordialement.
Luc
Résolu !
Accéder à la solution.

"on" a discuté de "tout ça" avec altenbach sur le forum anglophone.
J'ai voulu "tester" avec une petite routine en assembleur et un appel DLL.
(recherche du nombre d'occurrences d'un caractères dans une chaine)
à ma grande surprise, je n'arrive pas à faire "mieux" en assembleur !
Je suis très étonné ! Peut-être LV prend-t-il un "temps fou" dans sa procédure d'appel à une DLL.
Je ne vois que ça.
clic ici
(mon dernier post)

Similar Messages

  • Supprimer un élément dans une chaîne déroulante

    Bonjour,
    Alors voici mon problème : avez-vous une idée de la façon de supprimer un élément dans une chaîne déroulante ? Pour l'instant, j'arrive à seulement ajouter des éléments, mais je souhaiterais à terme pouvoir en supprimer et même les modifier, donc si vous avez une idée je suis preneur ,
    Florian
    Résolu !
    Accéder à la solution.

    Merci pour votre réponse,
    j'ai utilisé ce noeud de propriété, mais lorsque je veux supprimer un élément du tableau, je dois indiquer l'indice dans lequel la chaîne se trouve, il existe d'ailleurs une fonction qui permet de le faire. Le problème c'est que je ne récupére pas la chaîne mais la valeur de la chaîne qui est différente, je veux simplement récupérer la chaîne lorsque je la choisi dans la chaîne déroulante,
    Cdt,
    Florian

  • [LV 8.6] Rechercher expression dans une chaîne

    Bonjour,
    j'ai un fichier .cfg dont j'aimerais récupérer 2 caractéristiques (R et L). Le fichier .cfg est un fichier texte en fait et voici son contenu :
    MotorType = Stepper
    MotorPositionFeedback = IncrementalEncoder
    ImaxM = 1.5
    In = 1
    NoMotorSteps = 400
    NoMicroStepsPerStep = 256
    K = 0.4
    R = 5.2653
    L = 0.0054936
    No_encoder_lines = 500
    isMotorTemperatureSensor = 0
    Motor_TempSensor_Type = 0
    isEncoder = 0
    et j'aimerais avoir sur ma face avant :
    R = 5.2653
    L = 0.0054936
    Quelle est la fonction que je dois utiliser ?
    Merci d'avance !

    Bonjour, je me permets une remarque. Vous cherchez « R =  », donc en réalité « R\s=\s » (\s étant l’espace) mais si vous avez « 2 caractères espace » cela ne fonctionne plus. Je pense qu’il serait plus judicieux d’ouvrir le fichier un chaîne de caractères (comme aujourd’hui), de le convertir un tableau 2D de chaines de caractères en utilisant le séparateur « = » pour séparateur de colonne, de chercher l’index caractère « R » dans la première colonne et d’utiliser cette valeur pour indexer la deuxième colonne.
    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

  • Envoi d'une chaîne de caractère avec (visa write) caractère par caractère

    Salut,
    Je veux savoir comment écrire une chaine de caractère en utilisant "visa write" caractère par caractère et la lire par la suite par "visa read"
    J'ai essayé d'utiliser une boucle for, un délai et avec l'objet "chaîne au format tableur en tableau" et j'ai pas réussi a le faire; je pense que j'ai pas bien spécifier ses entrées (chaîne de format et chaîne de type tableur)
    Veuillez me donnez un exemple ou me clarifier comment le faire.
    Merci d'avance

    Duplicate Post.  See here for the question in English.

  • Décomposer une chaîne de caractère

    Bonjour,
    Je suis actuellement en stage et je dois développer une IHM sous LabVIEW afin de piloter un générateur d'impulsion.
    Pour ça, il suffit de lui transmettre des commandes : "Exemple : NU,180;" mais je dois entrer le "check sum" en fin de fonction et pour ça je dois convertir chaque caractère en hexadécimal mais il me faudrait pour cela réussir à les séparer l'un de l'autre et je ne sais pas si cela est possible sous LabVIEW sans utiliser de séparateur (/ , ; etc etc) car je souhaite automatiser le calcul de ce Check sum en fonction des valeurs numériques entrées (je souhaite que le "NU," soit une constante que j'associerais par la suite à la valeur numérique entrée sur l'IHM (partie déjà créee)).
    Je vous remercie d'avance pour vos réponses. 
    Résolu !
    Accéder à la solution.

    Pièces jointes :
    idem_en_LV2009.vi ‏5 KB

  • Chaîne de caractère = Nombre

    Bonjour,
    cela fait maintenant 1 semaine et demie que j'ai commencé sur LabView, et je suis confronté à un nouveau problème.
    Je rentre une donnée dans un tableau, puis un autre, ...  et je concatène toute ces données. Je met tout ceci dans une chaîne de caractère.
    Puis, dans le but de communiquer avec une carte DDC, il faudrait que je mette cette chaîne de caractère dans un nombre.
    Cependant, je ne veux pas convertir ma chaîne.
    Trame : ma chaîne de caractère extraite de mon tableau
    Number : le message à envoyé ( convertion en binaire de Trame)
    Le but est donc d'avoir les 2 mêmes chaînes
    Merci
    Attachments:
    FA.JPG ‏28 KB
    diag.JPG ‏4 KB

    Bonjour Palouch,
    Vous souhaitez récupérer le code ASCII de votre chaîne de caractères?
    Si tel est le cas, je vous encourage à lire les documents suivants qui traitent du sujet:
    1  . How Can I Convert ASCII Characters to ASCII Codes and Vice-Versa?
    2 . Table of ASCII Characters and Their Code Equivalents
    Si ce n'est pas l'opération souhaitée, pouvez-vous reformuler votre question?
    Cordialement,
    Rémi D.
    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;}
    >> Les rencontres techniques de NI - Mesures et acquisition de données : de la théorie à la mise en ...

  • Désordonner une chaîne

    Bonjour, je suis un simple étudiant en Bac+2 et j'ai un petit projet à présenter mais j'ai un problème de taille au démarrage :
    Je voudrais générer une chaîne de x caractères comprenant uniquement les caractères A, T, C, G. Jusque là, rien de bien compliqué, je me suis dit A=0 T=1 C=2 G=3 et je les génère par le hasard.
    Là, ou ça se corse, je voudrais avoir un certain pourcentage de C et G par rapport au total des caractères et là je suis bloqué.
    Admettons que je veule 60% de caractères C et G dans ma chaîne de longueur 20 par exemple. J'ai eu l'idée de générer une chaîne de 0.6*20=12 caractères pour les C et G et du coup 8 pour les A et T et de les concaténer et voilà le problème, j'obtiens :
    CGGGCGCGCCGGAATTTATA
    Je voudrais que ces caractères soient complètement mélangés ( ex : CCATGCGAGACTAGGGTTCG ) pour la suite de mon programme.
    Comment faire intervenir le désordre avec cette chaine ?
    Et là, je sèche, j'ajoute que je débute en Labview et que mon prof n'a pas su me répondre non plus, je m'en remets donc à vous :/
    Merci d'avance à ceux qui répondront !

    Bonjour CapitaineNemo,
    Voilà une solution qui génère une chaîne de caractère à la taille souhaitée et qui contient une proportion paramétrable de C et G.
    Dans mon VI, je suis parti du principe qu'on voulait autant de A que de T et autant de C que de G mais qu'on peut choisir la proportion de C+G par rapport à A+T. Lors des divisions pour calculer les nombre de lettres, j'ai priviliégier le A et le C en faisant la division entière et en ajoutant le reste au A et au C.
    Ensuite on vient mélanger le tableau généré avec la fonction donné par @altenbach.
    Je te laisse nous dire si ca te convient.
    Si c'est bon pour toi, pense à marquer ta question comme résolue et a remercier les contributeurs.
    .mesLeft{float:left} .mesInfo{border-left:solid 1px #989898;font-size:x-small;color:#989898} .mesLogo{float:right;opacity:0.18} .mesLogo:hover{opacity:0.9}
    Maxime R.  
      CLD - Certified LabVIEW Developer / Développeur LabVIEW Certifié  
      CLAD - Certified LabVIEW Associate Developer   
    Pièces jointes :
    Chaine melangee.vi ‏15 KB

  • Recherche dans une chaine (un petit défi ?)

    Recherche dans une chaine du nombre d'occurences d'un caractère unique ou d'une sous-chaine (plusieurs caractères)
    en pièce jointe, un Benchmark reprenant différentes méthodes. (chaine de départ : 50e6 caractères)
    y est repris ma méthode avec un code en assembleur et l'appel du dit code dans une dll.
    Mon code (ASM_DLL) supporte la recherche d'un caractère unique ou d'une sous-chaine.
    sous-chaine : "abc"
    SpreadSheat - 504ms
    Replace - 428ms
    Count (search 1D array) : ne fonctionne pas si plus de un caractère.
    ASM_DLL - 71ms
    caractère unique : "a"
    SpreadSheet - 639ms
    Repalce - 435ms
    Count (search 1D array) - 102ms
    ASM_DLL - 78ms
    L'outil de mesure est fourni, soit le code benchmark ci-joint.
    Vous pouvez donc prendre les temps "suivant" votre machine, et établir les rapports de comparaison.
    Mis à part la méthode pour générer la chaine de 50e6 caractères, le reste du code est "from altenbach"
    En ce qui me concerne:
    ASM_DLL / Replace = 71ms/428ms = 0,16
    objectif : trouver le nb d'occurences de la sous-chaine "abc" dans une chaine de 50e6 caractères
    (la chaine de départ est générée aléatoirement avant le start du Bench)
    Qui peut trouver un code plus rapide que la méthode "Replace" avec un coefficient inférieur à 0,16 ?
    Quelqu'un pour relever le défi ? .. un petit 0,15 ?

    bon ... et bien j'ai joué tout seul
    aucun passionné d'optimisation et/ou d'assembleur su le forum ?
    Je suis descendu à 0,14 (par rapport à la méthode "replace")
    La métode "replace" (code LV) est la plus rapide pour une sous-chaine comportant plusieurs caractères.
    Pour un caractère unique, la métode la plus rapide est "Count" (et "Count_parallel")
    ("Count" fonctionne uniquement pour la recherche d'un caractère unique)
    Ma dll prend les deux, un caractère unique ou une sous-chaine quelconque. (comme "replace" ou "spreadsheet")
    J'ai peaufiné l'algorithme et le code au maximum, un 0,12 ou même un 0,13 me semble impossible. (sans parallelisme)
    Si vous avez de très longues chaines à scanner, servez-vous de cette dll, ça va vite

  • Priorité dans une file d'attente

    bonjour
    je cherche un moyen afin de définir une priorité dans une file d'attente.
    j'ai une boucle qui envoie des éléments dans une file d'attente et deux autres qui les traitent en parallèle, mon soucis est de pouvoir décider dans quel boucle de traitement est envoyé mon élément.
    je joint un exemple pour se faire une meilleur idée !
    merci de votre aide
    Il a LabVIEW, il a tout compris !
    Pièces jointes :
    Sans titre 1.vi ‏15 KB

    Salut,
    Une idée, au lieu de transmettre juste une information, est de transmettre en plus un destinataire sous la forme d'un énuméré.
    La file d'attente tranporte donc des clusters (association d'éléments) contenant un énuméré de destination et une chaîne de caractère correspondant aux données.
    Dans tes boucles consommatrices, lis l'élément dans la file d'attente (sans le supprimer), et si la boucle doit le traiter, lit le en le supprimant.
    Ca donne un code dans le genre.
    A+
    Edit: VI en PJ, car il semble qu'il y ai un bug (au moins d'affichage dans le png au dessus au niveau du type d'éléments à câbler lors de la création de la file d'attente)
    Mathieu Steiner, Test System Engineer, Safran Engineering
    CLD, ISTQB
    Pièces jointes :
    Sans titre 1.vi ‏20 KB

  • Contraindre la taille d'un chaîne de caractère

    Bonjour,
    je travailles sur un projet de ballon sonde, l'exploitation des données se faite sur labview. Nous faison un suivi GPS en temps réel et voulon l'afficher grâce à google map, ce qui nécessite la création d'une chaîne de caractère qui sera l'URL, je voudrai afficher la trajectoire du balon avec des marqueurs. L'URL s'aggrandit donc au fur et à mesure du temps.
    LE PROBLEME :
    la taille de l'URL est limité, je n'ai pas réussi à contraîndre la taille de l'URL. Le but et de ne conserver que les 263 dernières valeurs d'une chaîne (je n'ai pas envie de cabler 263 registre à décallage).
    J'ai fait un VI qui sera plus tard intégrer au programme principal et qui construit l'adresse URL en ajoutant petit à petit des valeurs bidons pour les "markers"
    contraintes :
    la boucle while est indipensable et représente l'envirronement du programme final
    l'url doit être un chaîne de caratère
    Merci d'avance pour vos répnse.
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    url.zip ‏19 KB

    Re-bonjour,
    je n'avais pas ouvert le bon VI. Je te conseille de changer la structure. Je stockerai la liste des coordonnées dans un tableau plutot que dans une chaine.
    Ensuite, il faut transformer ce tableau en chaine de caractere a chaque iteration... a l'aide des fonctions indiquees dans le message precedent.
    Adeline
    Pièces jointes :
    URL.zip ‏25 KB

  • Trouver le nombre de test exécutés dans une séquence

    Bonjour,
    je cherche comment trouver le nombre de test qui ont été exécutés dans une séquence (je sais trouver le nombre de test d'une séquence par "GetNumElements(RunState.Sequence.Main )", mais pas l'index du test en cours.
    Merci pour toute aide
    JMC
    JMCe

    Hello JM Cereuil,
    The number of tests(steps) executed in a sequence is allways given by the value of RunState.PreviousStepIndex (zero-indexed). If this value is -1, than no steps where executed in the currently executing sequence.
    Hope this answers your question,
    Silvius
    Silvius Iancu

  • Écriture dans une base de données Access

    Bonjour,
    J'utilise labview 8.5 avec le Toolkit NI LabVIEW Database Connectivity, et comme base de données Access 2007.
    Ma base de données est déjà créer, et je doit lui envoyer différentes données. J'ai créer un simple vi pour écrire une chaîne dans cette base de données mais j'ai une erreur : 
    L'erreur -2147467259 s'est produite à : Cmd Execute.vi->DB Tools Insert Data.vi->database.vi
    Raisons possibles :
    Exception occured in Microsoft JET Database Engine: Le nombre de valeurs de la requête doit coïncider avec le nombre de champs destination. dans Rec Create - Command.vi->Cmd Execute.vi->DB Tools Insert Data.vi->database.vi
    En utilisant les exemple de labview j'arrive à lire la base de données, mais je voudrais écrire.
    Merci
    Mickaël
    Pièces jointes :
    database.vi ‏16 KB

    Bonjour,
    Tout d'abord merci d'avoir posté sur le forum National Instruments. Poour votre problématique, je vous conseille de regarder l'aide détaillée LabVIEW de la fonction DB Tools Insert Data qui vous donnera toutes les informations nécessaires pour cette fonction.
    Dans votre cas, la data que vous voulez insérer n'est pas du type cluster. Or dans ce cas, le VI insert les données dans la colonne que vous spécifiez, entrée que vous n'avez pas spécifiée. Votre erreur doit donc venir de ce point.
    N'hésitez pas à regarder les exemples à la fin de l'aide détaillée qui vous aideront dans la mise en place de votre VI,en particulier l'exemple Sixtypes Insert VI.
    Cordialement
    Mathieu B
    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;}
    Forum Aéronautique, Spatial et Défense. Avec la participation exceptionnelle de Bernard DUPRIEU, Res...

  • Afficher les images d'un repertoire à tour de rôle dans une même fenêtre image

    Bonjour à tous,
    Je voudrais afficher les images d'un repertoire à tour de rôle dans une même fenêtre image. Quelqu'un peut-il m'aider. Merci d'avance.

    Bonjour,
    Je vous joins un VI "clé en main" et je pense que ça répond à votre attente...
    Dans le dossier, les deux photos doivent se placer sur le disque C:\.
    Le VI permet l'affichage de ces photos... On y règle la temporisation et le nombre de photos à afficher.
    Cordialement
    David D.
    Ingénieur d'Applications
    NI France
    Attachments:
    Picture.zip ‏999 KB

  • Mesurer le nombre de bytes d'une trame ASCII variable

    Bonjour,
    Je travail sous Labview V8.5
    Je voudrai mesurer le nombre de bytes d'une trame ASCII dont la taille peut varier. Pour une liaison RS232 classique j'utilise l'instruction " Bytes at port " mais ici avec une trame ASCII 128 , elle me retourne 0. En pratique cette trame peut varier entre 21 et 25 Bytes.
    J'ai besoin de connaitre la longueur de trame pour parametrer le "visa read". En effet ma trame ascii commence par <DLE> ( 0x10) et se termine par <DLE><ETX>(0x1003). En règle général elle fait 21bytes. A l'intérieur de cette trame je peux retrouver un 0x10 et le module GPS (qui m'envoie cette trame) rajoute un 0x10 pour indiquer un nombre plutot qu'un <DLE>.  Etant donné que je lit des compteurs, il arrive qu'il y est la valeur 10 ( 16 en décimale ) et donc le module envoie 1010 au lieu de 10, ce qui me ralonge la trame. Actuellement j'indique 21 dans le "byte count " du "visa read" de ma lecture de RS232 mais elle peut donc augmenter et je rate des caratères et mon traitement en aval est décalé.
    En gros quelle fonction remplace le "Bytes at port " pour de l'ascii.
    Merci.
    JohannB

    Bonjour Johann,
    C'est étrange que le noeud de propriété te retourne 0.
    Si tu sais quelle sera la taille max de la trame a recevoir tu peux tout à fait spécifier cette valeur en entrée du VI "Read" car:
    VISA READ DETAIL:
    This function might return less than the number of bytes requested if the function reaches the end of the buffer, reaches a termination character, or if a timeout occurs. The output error cluster indicates if a timeout has occurred.
    Ce n'est donc pas un problème.
    Cordialement,
    Romain DUVAL || Application Engineer Specialist ||Certified LabVIEW Architect (CLA) || Certified TestStand Architect (CTA)
    National Instruments France

  • Keithley 2400 Meter Read dans une boucle - probleme de status byte read

    Bonjour,
    j'utilise un Keithley 2400 pour mesurer un potentiel. J'ai débuté en utilisant le modèle Read.vi du driver. Dans mon cas, la portion "read single" se trouve dans une boucle for et après un certain nombre de mesures (cela semble aléatoire), la fonction gèle et en remontant les étapes, on découvre qu'il s'agit de la lecture de "status byte" qui ne reçoit aucune réponse en amont. Il faut alors redémarrer complètement le programme. Celà survient à chaque fois et après un nombre d'itérations variable.
    J'ai même tenté de mettre une boucle while directement dans l'exemple "read single" (le .vi) et le problème est exactement le même, même si on ajoute un wait à la boucle. Après un certain temps, ça gèle et c'est le status read qui ne reçoit aucune réponse.
    Merci.

    Bonsoir PG123,
    Ce que je vois directement dans votre VI c'est le fait que vous exécutiez à la vitesse maximum votre boucle While sans le moindre cadencement ne laissant ainsi jamais de temps disponible au processeur pour effectuer d'autres tâches. Il est propable de plus que l'instrument ne supporte pas un nombre de requêtes aussi élevée saturant peut être son buffer ou ne laissant pas le temps à l'instrument d'écrire correctement les valeurs.
    De plus, je pense que vous n'avez pas besoin de récupérer à la vitesse maximum toutes les valeurs possibles provenant de votre instrument. C'est pourquoi je pense qu'une lecture toutes les 200ms suffirait déjà amplement.
    Voici donc à quoi devrait ressembler l'intérieur de votre boucle While :
    Essayez avec un cadencement d'1 seconde (1000ms en entrée de la fonction) dans un premier temps et voyez si le problème de gel se produit. Si ce n'est pas le cas, vous pourrez alors progressivement diminuer la valeur de cadencement (jusqu'à 200ms minimum, celà devrait suffire comme déjà dit au dessus.
    Cordialement,
    Jérémy C.
    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;}
    Travaux Pratiques d'initiation à LabVIEW et à la mesure
    Du 2 au 23 octobre, partout en France

Maybe you are looking for

  • How do I delete imported photos on the iPad in less then 2000 clics?

    Hi. I've been using the iPad to collect photos form my digital cameras. I have a few thousand of such photos on my iPad. Today I wanted to delete them (because they take a lot of memory and are synched anyway after correction). I could only find how

  • Changing address in sales order item level

    Dear very good mng i want to know , i am trying to change ship to party address in sales order line item level but showing Gray mode only ..  i have maintained Sales document item level ( partners) Removed check box not modifiable And i activated Ite

  • Opening a document with a dialog open

    I am trying to open a document with a window open created by javascript, but I get an error when the window is open and I try to open the document. See attached: Is there no way to have a window open and the application open a document at the same ti

  • Error - FTR_EDIT (Unable to settle the deal using ftr_edit)

    Dear All, Dear All, While  settling the MM deal using T code - FTR_EDIT I am getting the bellow error messages.              1) Error Message : Recording position management: Error during distribution FTRM 100000000000                   Message no. F

  • Totals

    I did a calculation in discoverer desktop COUNT_DISTINCT(X) It works fine but when I'm trying to du a total Grand sum of the column it does not show. If i try to do a count it shows. What can I do to make the Sum show at the bottom of the column? I'm