Recherche par mots clés

VeillardVeillard Membre
23:27 modifié dans API AppKit #1
Bonjour tout le monde  <3 <br />
J'espère que vous avez passé un bon réveillon de Noël et tout ce qui a suivi  :p

Bon, j'ai un petit problème :  :-\\
Je suis en train d'écrire une fonction de recherche par mots clés (recherche strings contenus dans un array). Voilà  seulement je ne peux par faire une recherche par mots clés, je suis obligé de taper l'ensemble de l'expression à  rechercher.
Pour cela, j'ai utilisé quelque chose du style "isEqualTo:" pour dépanner mais comment fait-on pour avoir une recherche par mots clés ?

Merci

Réponses

  • muqaddarmuqaddar Administrateur
    23:27 modifié #2
    Euh, je ne sais pas si c'est le réveillon, mais je n'ai pas compris ton problème Favouille...
    :(

    Si tu peux préciser...
  • VeillardVeillard Membre
    23:27 modifié #3
    Pas de problème :

    J'ai un array contenant des string. Ce que je cherche à  faire, c'est mettre en évidence les index de l'array qui contiennent un mot précis, soit le mot seul constitue la string, soit il fait partie d'une phrase par ex.

    MyArray
        - index 0 : "le réveillon de Noël"
        - index 1 : "Noël"
        - index 2 : "le jour de l'an"
        - index 3 : "le soir de Noël"

    Si je recherche "Noël" avec quelque chose du style :
    if ([[myArray objectAtIndex:i] isEqualTo:@&quot;Noël&quot;])
    


    je n'ai que l'index 1, j'exclus les index 0 et 3 qui contiennent aussi "Noël". Je m'attendais à  ce résultat. Donc en fait, comment peut-on inclure les autres index ?
  • 23:27 modifié #4
    Tu dois utiliser -rangeOfString:options:range:, ou ses variantes. Si le range.location renvoyé != NSNotFound, alors l'expression recherchée est contenue dans l'objet scanné
  • VeillardVeillard Membre
    23:27 modifié #5
    Merci Renaud, ça marche au poil pour des strings en provenance de NSTextField !  :brule:
    Par contre, j'ai un plantage quand la recherche de fait sur une string en provenance d'une NSTextView (à  la deuxième recherche consécutive).
    J'ai :
    -[NSConcreteValue length]: selector not recognized


    j'ai écrit ceci :
    if ([tableauDesPlongees count] &gt; 1)<br />	{<br />		for (i = 0 ; i &lt; [tableauDesPlongees count] ; i++)<br />		{<br />			tempString = [[tableauDesPlongees objectAtIndex:i] valueForKey: champ];<br /><br />			range = [[[tableauDesPlongees objectAtIndex:i] valueForKey: champ]<br />						rangeOfString:[searchField stringValue]<br />						options:NSBackwardsSearch<br />						range:NSMakeRange(0,[tempString length])];<br /><br />			if (range.location != NSNotFound)<br />			{<br />				[resultString appendString:@&quot;&#092;n&quot;];<br />				[resultString appendString: [[[tableauDesPlongees objectAtIndex:i]<br />						valueForKey:@&quot;nbPlongee&quot;] stringValue]];<br />				[plongeesTableView selectRow:i byExtendingSelection: YES];<br />			}<br />		}<br />	}<br />
    


    Est-ce que j'ai écrit :
    tempString = [[tableauDesPlongees objectAtIndex:i] valueForKey: champ];<br /><br />... NSMakeRange(0,[tempString length])<br />
    


    est correct ?
  • 23:27 modifié #6
    Pour les nstextview, tu dois envoyer un string avant de faire la recherche, puisque l'info est détenue sous forme de nsattributedstring (qui n'est pas une sous classe de nsstring).
  • VeillardVeillard Membre
    23:27 modifié #7
    J'avais pourtant utilisé "tempString" qui est déclaré comme NSString.
    "tempString" me permettait de récupérer la string de TextView qui est stockée dans l'array.
  • VeillardVeillard Membre
    23:27 modifié #8
    Ca marche !

    J'avais écrit :
    NSString *tempString = [[NSString alloc] init];<br />...<br />[tempsString release];<br />
    


    et avec :
    NSString *tempString = [[[NSString alloc] init] autorelease];<br />
    


    Tout fonctionne  :brule:
  • VeillardVeillard Membre
    23:27 modifié #9
    J'ai une autre question :
    Est-il possible d'éviter de prendre en compte la casse d'un mot. Par ex. quand je recherche le mot "poulpe", j'aimerais avoir "poulpe" et "Poulpe".

    Je sais qu'en Cocoa, tout est possible !  :)
  • muqaddarmuqaddar Administrateur
    23:27 modifié #10
    Regarde du côté de :
    options:NSCaseInsensitiveSearch
    ;) pour ton range.
  • VeillardVeillard Membre
    23:27 modifié #11
    Ca marche ! Merci oxitan misc.php?do=getsmilies&wysiwyg=0&forumid=47#
Connectez-vous ou Inscrivez-vous pour répondre.