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

Similar Messages

  • Ajouter une chaine dans une chaine déroulante

    Bonjour,
    Je suis nouveau en labview, et j'aimerai savoir comment on ajoute une chaine dans une chaine déroulante.
    Merci
    Cordialement
    Solved!
    Go to Solution.

    Bonjour Rémi,
    Rien de plus simple, tu fais un clic-droit sur ta chaine déroulante >> Editer les éléments...
    Tant que j'y suis je te conseille d'utiliser une commande de type énum plutôt qu'une chaine déroulante. Les deux commandes ont la même fonctionnalité sur la face-avant. L'avantage est qu'une commande énum est gérée sous forme de numérique sur ton diagramme, c'est donc plus facile à utiliser est moins source d'erreur que d'utiliser des chaines. C'est notamment très pratique avec une structure condition.
    Bonne journée,
    M-Junior

  • Trouver une chaine dans une chaine

    Bonjour, (Labwindows CVI 8.0)
    Je cherche une fonction du type strcmp en plus évoluée. Je veux faire une barre de recherche dans mon programme. Par exemple je cherche l'objet 1185 je fais cherché et à l'aide de la fonction strcmp il trouve mon objet jusqu'ici tout va bien.
    En revanche si je cherche les objets qui comporte les numéro 118 par exemple 1180, 1185, 6118, 21187,... là il ne trouve rien du tout. ALors que je voudrais qu'il me les trouve tous.
    Au final c'est une simple barre de recherche commande windows lorsque l'on fait Rechercher , mais là je suis bien bloqué.
    Merci d'avance,
    Cordialement Kévin.

    Bonjour,
    Il n'y a pas de fonction toute faite permettant de réaliser cela, cependant vous pouvez utiliser les expressions régulières via la fonction  http://zone.ni.com/reference/en-XX/help/370051K-01/toolslib/cviregexpr_findpatternintext/
    Avec cette fonction et en bricolant un peu vous devriez pouvoir trouver toutes les occurences que vous recherchez.
    Cordialement,
    Da Helmut

  • 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)

  • Comment je peux récupérer une chaine de caratères d'un fichier(txt par expl) dans une ligne (spécifiée) et une colonne (aussi spécifiée) avec notre adorable software LABVIEW

    Salut à tous,
    Comment je peux récupérer une chaine de caratères d'un fichier(txt par expl) dans une ligne (spécifiée) et une colonne (aussi spécifiée) avec notre adorable software LABVIEW.
    Thx
    Nizar
    Résolu !
    Accéder à la solution.

    Si ton fichier est un fichier tableur ce qu'a dit yohann me parait le mieux. Par contre si c'est un fichier texte qui contient une chaine au format tableur (sepération avec des tabulations) il faut utiliser "lire un fichier texte" + "Convertir un chaine au format tableur en tableau" et ensuite indexer la case qui t'intéresse.
    Maintenant si tu as un simple fichier texte  et que tu veux lire un couple ligne/colonne qui désigne un caractère précis il faut utiliser "définir la position dans le fichier" en connaissant la largeur de ton fichier texte. et la tu n'as plus qu'à rentrer dans offset: indice_ligne*largeur+indice_colonne comme une vieille réminiscence du c.
    Sebastien DEVISSCHER - Nerys

  • Balayage et conversion d'une chaine "scientifique" en valeurs "décimales"

    Bonjour à tous,
    Je souhaite votre aide pour un petit pb que je n'arrive pas à résoudre.
    Z 7.2295E+05,Y 1.3832E-06,PHASE -89.09,CS 2.2018E-10,CP 2.2012E-10...
    Je souhaiterais balayer la chaine ci-dessus pour en retirer les valeurs"scientifiques" et les convertir en valeur "décimales" pour les mettre dans une par une dans un tableau.
    J'ai essayé quelques vi de convertion mais  mes résultats sont très moyens ! Il me manque toujours un morceau dans le tableau ...
    En fait, la chaine fait une 20 ène de mesures avec 20 valeurs au format scientifique.
    Merci.
    Cordialement

    Bonjour,
    Petite proposition. Je reste dispo si tu as des questions
    Maxime
    Certified LabVIEW Associate Developper
    Pièces jointes :
    ConversionSciDec.vi ‏12 KB

  • Transformer une chaine hexadecimal complément à 2n en décimal

    Bonjour à tous,
    Voilà, tout est dans le titre.
    Je désire transformer une chaine hexadecimal complément à 2n en Décimale.
    Exemple : en utilisant la fonction chaine hex en decimal : "FFFA" donne "65530" mais si on transforme avec complement à 2n je devrais obtenir ( -6).
    Je n'ai pas trouvé de fonction qui permette de le faire. SI vous avez une solution je suis preneur!!!!
    En cherchant sur les forums, j'ai trouvé un petit Vi qui permet de transformer un nombre binaire (I16) en decimale avec complement à 2n qui fonctionne.
    Le soucis c'est que dans mon VI je recupère une valeur hexadecimale type Chaine et je n'arrive pas à transformer : "1111111111111010" au format chaine en "1111111111111010" format I16 pour pouvoir connecter ce petit VI. (png ci_joint)
    Je ne sais pas si j'a été suffisament préscis mais je vous remercie d'avance pour toute l'aide que vous pouvez m'apporter cellà fait un petit bout de temps que je tourne en rond sans trouver de solution.
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    Conversion 16bit Binaire en decimale complément à 2n.png ‏20 KB

    de rien 
    c'est un grand classique de "binary string to number".
    Cette fonction n'existe pas dans la palette "String / number-string conversion"
    Elle a (je pense) été proposée sur labview idea exchange.
    Peut-être une fonction dédiée (native) serait-elle "plus rapide" (??)
    Dans le cas contraire ... je n'en vois pas trop l'utilité.
    Ce "scan from string / %b " fait parfaitement ce travail.
    bon code.

  • D'un tableur excel à une chaine déroulante

    Bonjour,
    je cherche à faire afficher par une chaine déroulante (en face avant) une liste de nom contenu dans un fichier excel. Ces nom sont dans la première colonne et sur les 40 premières lignes. Mon début de programme est "lire un fichier tableur".mais après les solutions essayé ne marche pas. Il y a la solution en entrant ces noms dans "propriété de chaine déroulante" mais si ma base de donnée de nom change ....
    En vous remerciant de votre aide
    Cordialement
    4Sup

    bonsoir
    rien a voir avec la question de départ mais il n'est peut etre pas judicieux de stocker l'age
    c'est redondant et peut etre source d'erreur. Puisque tu disposes de la date de naissance
    autant implementer une fonction de calcul de l'age
    Cdt
    Tinnitus
    CLAD / Labview 2011, Win Xp
    Mission d'une semaine- à plusieurs mois laissez moi un MP...
    RP et Midi-pyrénées .Km+++ si possibilité de télétravail
    Kudos always accepted / Les petits clicks jaunes sont toujours appréciés
    Don't forget to valid a good answer / pensez à valider une réponse correcte

  • Fonction rechercher dans un tableau 1D

    Bonjour, actuellement je fais un snake et je désire donc pour mes colisions Utiliser la fonction rechercher dans un tableau 1D. Le souci c'est que elle ne balais que de l'indice 0 à 59 or moi j'en ai 400 minimum.
    Voyez vous une solution?
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    Snake.zip ‏43 KB

    Bonjour,
    Je ne peux pas ouvrir ton code car je n'ai pas LV 2011.
    Je ne comprends pas bien d'où vient ta limitation de 59, es-tu sûr que ton tableau contient bien 400 elements?
    Je viens de faire un test avec 500 elements et il n'y a pas de limitation particulière avec cette fonction.
    En revanche, peut-être que tu cherches une donnée qui existe déjà à l'indice 59, du coup il te sort cette valeur car c'est le 1er indice pour lequel l'élément cherché a été trouvé.
    De plus, tu peux utiliser l'indice de départ pour décaler ta recherche, ainsi, si dans ta première recherche tu as trouvé l'indice 59, tu peux rappeler la fonction avec l'indice de départ à 60 et ainsi recommencer la recherche dans la suite du tableau.
    Cordialement,
    Olivier L. | Certified LabVIEW Developer

  • InDesign CS5 - Pdf interactif - texte dans une fenêtre flottante

    Bonjour,
    Je suis en train de réaliser un pdf interactif dans InDesign CS5, j'ai intégré une vidéo dans une fenêtre flottante sans soucis.
    Je souhaite faire la même chose avec du texte (quelques lignes de texte et un bouton "lire la suite" qui ouvrirait un texte simple dans une fenêtre flottante) mais je n'y parviens pas ?
    D'avance merci.

    Si votre pdf est bien lu dans adobe reader, vous pouvez utiliser les fonctions avancées du pdf interactif (nécessitent Acrobat Pro) qui consistent à afficher/masquer un calque spécifique au clic d'un bouton. Mais cela nécessite autant de calques Acrobat que de textes…

  • Mettre une photo dans une forme illustrator

    Bonsoir,
    J'ai un problème!
    J'ai fait une forme sur Illustrator: des anneaux olympiques en gros , avec un peu d'extrusion en 3D pour que ça fasse joli! jusque là pas de pbs
    Mon but est de mettre des photos dans les anneaux et d'écrire dessus.. pour cela j'ai mis ma forme sur photoshop mais à partir de là impossible .. je ne sais pas comment faire!
    J'ai essayé de tout faire sur photoshop mais la forme rend vraiment pas terrible par rapport à ce que j'ai fait sur Illustrator
    Quelqu'un pourrait-il me guider? je ne sais même pas s'il faut que je l'insère en tant que smart object, pixels, path ou shape layer au début..
    Merci beaucoup!!!
    je mets mon fichier ai en pièce jointe si vous voulez vous faire une idée
    Bonne soirée
    doud05

    Bonjour!
    Si vous voulez insérer des photos dans les parties intérieures blanches,
    vous devez utiliser les masques (d'écrêtage dans Illustrator, de fusion dans Pshop).
    Pour cela vous devez dupliquer les formes blanches seulement; ces formes seront utilisées comme masques.
    Comme elles «n'existent pas» vectoriellement parlant, il faut que vous sélectionnez le tout puis,
    menu Objet » Décomposer l'aspect.
    Par la suite, vous pourrez sûrement obtenir les formes indépendantes en utilisant les pathfinders.
    Mais c'est un travail assez long, et je ne garantis pas la réussite, surtout si vous n'êtes pas habiles avec les Pathfinders.
    Par contre dans Pshop c'est simple (le seul hic c'est que les dégradés sont moins visibles).
    Il s'agit de copier-coller votre image illustratror ou de la sauvegarder en .eps et de l'ouvrir dans Pshop en CMJN et non en RVB comme j'ai fait.
    Vos photos devront être en CMJN aussi.
    Ensuite, vous remplissez de noir 100% toute l'illustration dans Illustrator et vous sélectionnez le tout, puis copiez-collez dans une nouvelles couche de pshop.
    Attention, si elle se copie dans un calque, il s'agit de repartir du calque pour copier-coller dans la couche et jeter le calque inutile.
    Par la suite vous faites des copies de la couche, pour isoler sur chaque, les parties blanches que vous voulez utiliser comme masques, en remplissant de noir le reste. Puis inverser pour obtenir un élément noir sur fond blanc.
    Chacune de ces couches serviront de masque.
    J'ai fait un exemple avec le premier masque de votre illustration; je vous indexe deux photos écrans, la première montrant les couches, la deuxième montrant un calque avec masque.
    Il se peut qu'il y ait un léger décalage avec les anneaux en couleur mais en agrandissant beaucoup vous pouvez déplacer légèrement l'image et son masque.
    Bon travail!  ;o-)

  • Lancer un executable dans une fenêtre de mon VI

    Bonjour,
    Je souhaite lancer un executable dans mon VI, comme s'il faisait parti de mon code (pas à l'exterieur)
    Pour simplifier les choses, mon programme fera la liste de tous les executables disponibles dans un repertoire défini puis les proposera dans une boite à onglet
    Ces executables sont des SFP de ressource
    Ainsi je me retrouve avec un applicatif qui contient tous les SFP que j'ai de disponible (je ne pense pas en avoir plus de 10 sur un banc de test)
    Pour la gestion de la boite à onglet j'ai trouvé et ca marche bien
    Il ne me reste plus qu'a lancer les executables dans les différentes pages et là, je ne vois pas comment faire
    je sais que l'on peux lancer des executables à côté, mais cela ne m'interesse pas, je les veux dedans
    est-ce faisable ?
    D'avance merci
    Cordialement
    Résolu !
    Accéder à la solution.

    Hello,
    Attention, cette méthode était valable avant, et sur Windows XP (ou antérieur) : 
    - http://digital.ni.com/public.nsf/allkb/8545726A00272EB0862571DA005B896C?OpenDocument
    Pour les raisons citées, désormais on utilise plutôt les bibliothèques empaquetées. Elles sont compilées, donc pas de risque d'avoir de fuite de code :-)
    Un très bon début avec cette architecture :
    - https://decibel.ni.com/content/docs/DOC-19176
    Alternative moins crédible : appeler les exe par la fonction "System Exec", et jouer avec les fonctions Windows (au fond de user32.dll) pour que la fenêtre des exe soit une fenêtre enfant du VI appelant...
    A+
    --Eric
    Eric M. - Application Engineering Specialist
    Certified LabVIEW Architect
    Certified LabWindows™/CVI Developer

  • Comment ouvrir un fichier enregistré dans une version plus récente d'Indesign

    Bonjour à tous,
    J'ai crée mon CV sous Indesign CS8.0 (version Mac OSX). J'ai voulu le modifier hier mais la version d'essai était expirée depuis quelques jours. J'ai télécharger la version Indesign CC (toujours en version d'essai) pour pouvoir modifier mon CV, et au moment d'ouvrir le fichier, ce message apparait :
    "Impossible d'ouvrir le document "CV" car il a été enregistré dans une version plus récente d'Adobe indesign (CS8.0). Vous devez utiliser cette version ou une version ultérieure pour ouvrir le fichier."
    Or je n'arrive pas à télécharger cette version...
    Pouvez-vous m'aider ? Merci d'avance !
    Pauline

    Bonjour,
    J'ai crée mon CV sous Indesign CS8.0
    Ca n'existe pas, il doit s'agir de InDesign 8, également connu sous le nom de InDesign CS6.
    (Oui je sais, ce n'est pas simple).
    J'ai télécharger la version Indesign CC
    Or je n'arrive pas à télécharger cette version...
    Tu dis une chose et son contraire, laquelle est la bonne ?
    Si tu as InDesign CC il doit forcément ouvrir un fichier CS6, sinon c'est que ce n'est pas InDesign CC.
    Assures toi de ne télécharger que depuis le site d'Adobe, sous peine de te retrouver avec un logiciel obsolète, vérolé, etc.

  • Recherche dans un fichier PDF

    Bonjour
    Nous avons des fichiers éditeurs qui nous ont été communiqués début 2000. Le problème est le suivant, il est impossible d'utiliser la fonction recherche dans ces documents. Il ne reconnait aucun caractère sur PC/Windows, mais sur Mac, avec Aperçu nous pouvons faire ces recherches. Comment pourrions-nous faire pour que ces fichiers deviennent utilisables?
    il semble avoir été fait avec Distiller 4.05.
    Je vous remercie d'avance pour toutes réponses.
    Cordialement
    Valérie

    Oui je peux sélectionner le texte et faire un copier-coller. Mais quand on colle le texte, voici ce qu'on obtient :

  • Insérer une variable dans une boite de dialogue

    Bonjour,
    Je souhaite insérer une variable (valeur extraite d'un tableau Excel) dans une boite de dialogue. J'ai vu qu'on pouvait modifier le VI Express de la boite de dialogue mais je ne vois pas comment insérer cette variable dans le message d'entrée.
    D'avance merci

    Hello,
    First, I think that you can get more help if you write in english. Because i didn't understand completly your question.
    What you're trying to do it's simply what's in the attached picture? it's not all the code. Simply the read cell and the dialog.
    Software developer
    www.mcm-electronics.com
    PS: Don't forget to rate a good anwser ; )
    Currently using Labview 2011
    PORTUGAL
    Attachments:
    excel_dialolog.JPG ‏5 KB

Maybe you are looking for