Sujet n°2185
Posté par Sphinx le 16 Nov - 15:05 (2008)
Titre : Codes Texte
Comme vous ne le savez peut être pas, une chaine de caractère se comporte comme un tableau.

Je détaille :
Code:

s = "abcdefghij"

Voici une chaine que j'ai résumé dans la variable s.

Le code suivant :
Code:

s[4]

renverra la lettre d'index 4 (soit la 5°, puisque les index commencent à 0) c'est à dire la lettre "e". Enfin, ce n'est pas tout à fait exact, car ce bout de script renverra, non pas la lettre, mais le code qui lui est attaché, c'est à dire ici le 101.

J'ai fait un petit bout de code qui sert à convertir ce code en caractère et un caractère en code.

Ainsi, le 101 devient un "e" et le "e" devient 101 (ma méthode de conversion marche dans les deux sens !)

Bon, sans plus tarder, je vous propose mon code qui gère cette conversion :
Code:

  def conv_tche(car)
    tches = [
      [32,' '],[33,'!'],[34,'"'],[35,'#'],[36,'$'],[37,'%'],[38,'&'],
      [39,"'"],[40,'('],[41,')'],[42,'*'],[43,'+'],[44,','],[45,'-'],
      [46,'.'],[47,'/'],[48,'0'],[49,'1'],[50,'2'],[51,'3'],[52,'4'],
      [53,'5'],[54,'6'],[55,'7'],[56,'8'],[57,'9'],[58,':'],[59,';'],
      [60,'<'],[61,'='],[62,'>'],[63,'?'],[64,'@'],[65,'A'],[66,'B'],
      [67,'C'],[68,'D'],[69,'E'],[70,'F'],[71,'G'],[72,'H'],[73,'I'],
      [74,'J'],[75,'K'],[76,'L'],[77,'M'],[78,'N'],[79,'O'],[80,'P'],
      [81,'Q'],[82,'R'],[83,'S'],[84,'T'],[85,'U'],[86,'V'],[87,'W'],
      [88,'X'],[89,'Y'],[90,'Z'],[91,'['],[92,'\\'],[93,']'],[94,'^'],
      [95,'_'],[96,'`'],[97,'a'],[98,'b'],[99,'c'],[100,'d'],[101,'e'],
      [102,'f'],[103,'g'],[104,'h'],[105,'i'],[106,'j'],[107,'k'],[108,'l'],
      [109,'m'],[110,'n'],[111,'o'],[112,'p'],[113,'q'],[114,'r'],[115,'s'],
      [116,'t'],[117,'u'],[118,'v'],[119,'w'],[120,'x'],[121,'y'],[122,'z'],
      [123,'{'],[124,'|'],[125,'}'],[126,'~']
            ]
    if car.type == Fixnum
      for i in 0...tches.size
        if tches[i][0] == car
          return tches[i][1]
        end
      end
    elsif car.type == String
      for i in 0...tches.size
        if tches[i][1] == car
          return tches[i][0]
        end
      end
    else
      return nil
    end
  end


Collez le code ci dessus avant le dernier end du script Interpreter.

Pour l'appeler en évent ou en script :
Code:

conv_tche(car)

où car est un caractère quelconque. S'il n'est pas dans la liste, la méthode renverra nil (= rien).

Ensuite, en évent & scripts, à vous de voir ce que vous voudrez en faire. Par exemple, un message message codé ! Pourquoi pas ? Couplé avec ma méthode "afficher_texte" et votre imagination, vous pouvez facilement obtenir quelques effets sympas pour vos jeux !

Notez cependant un dernier détail : Seuls certains caractères sont présents dans cette liste. En effet, en Ruby, certaines touches ont le même code. Ainsi, "°" et "²" ont pour code 194, et les lettres accentuées ont le code 195. Comprenez donc que dans ces conditions, il soit plus difficile de mettre tous ces caractères dans mon tableau. Cependant, si vous y tenez, je pourrai créer un tableau supplémentaire, qui pourra vous permettre une conversion depuis un code quelconque vers un caractère précis.

Posté par Doum le 24 Nov - 18:07 (2008)
Gné ? j'ai pas tout compris au script ! Lordork chez mémé

Un peu plus de détail ? Queslqu'un peu m'éxpliquer ?

Merci :mrgreen:

Posté par Sphinx le 24 Nov - 19:25 (2008)
Clin d'œil foireux pas de pbs Clin d'œil foireux


Prenons cet exemple :
cc = "blablabla"

La chaine de caractères cc peut être utilisée comme un tableau =)

Ainsi cc[0] cible le premier b, mais renvoie le numéro 98 (>> b minuscule) ^_^

Cette fonction est là pour faire la conversion entre le numéro et la lettre (et ce, dans les deux sens ^_^)

Posté par Doum le 25 Nov - 16:33 (2008)
Ah, d'accord, donc ta méthode sert a enregistrer un texte dans un varible en le convertisant en chiffre par exemple puis de le resortir comme tel, en texte.

Si je n'est pas compris, c'est que je suis un cancre et donc pas besoin de perdre votre temps a m'éxpliquer :mrgreen: Merci de l'éxpliquation quand même.

Posté par Sphinx le 25 Nov - 16:43 (2008)
=) t'as compris le principal, mais un détail, ca ne passe par aucune variable dans mon script (c'est à l'utilisateur de se débrouiller avec ca ^_^)

2 cas :
>> t'as un caractère au départ :
Ma fonction te renverra l'équivalent en code.
>> t'as un numéro de caractère (code) au départ :
Ma fonction te renverra le caractère correspondant

PS : ^^' Par contre, elle ne traite qu'un seul caractère à la fois =) Mais je dois pouvoir la modifier de sorte qu'elle renvoie un tableau et non plus un code seul (et donc qu'elle puisse gérer un texte entier et non plus un seul caractère) Clin d'œil foireux

Posté par Krosk le 25 Nov - 18:55 (2008)
Ps: et si tu testais ...
Code:
s = "abcdefghij"
print s[4..4]

Posté par Sphinx le 26 Nov - 21:02 (2008)
^_^' ah oui, je ne connaissais pas ^_^"

=) bon ben finalement, ca marche même sans =)

Posté par Krosk le 26 Nov - 22:07 (2008)
Je trouve que c'est une bonne connerie, le coup du s[4]. Quelle surprise et quel casse tete la première fois que j'ai voulu tirer une lettre d'un string... jusqu'à que la documentation me dise que s[x] donne un numéro, mais s[x..y] donne des caractères.

Posté par Sphinx le 27 Nov - 09:05 (2008)
(xD tu l'a prends où ta doc ? xD apparemment, le site de rmxp studios n'a pas tout ^^')

Posté par Krosk le 27 Nov - 10:25 (2008)
Doc officielle en anglais, ruby-doc.org.

En général, sur google, tu tape "ruby" + le nom d'un type/structure (string, hash, array...) et tu tombe sur cette doc en première page.

Posté par Sphinx le 27 Nov - 11:07 (2008)
^^ merci (=) je vais voir ce que je peux en tirer ^^ l'anglais et moi, ca a tj été une graaaaaaaaaaaaaaaaande histoire d'amour xD)