1

Bonjour

J'ai un script vbs que j'aimerai convertir en php, le problème c'est que je n'y connais pratiquement rien en php...

En fait c'est un script tout bête qui prend des mots aléatoirement puis les assemble pour faire une phrase idiotement drôle. J'aimerai adapter ça à un site, c'est pourquoi je veux le convertir en php.

J'ai créé des fichiers .txt pour chaque style de mot (nom.txt, action.txt, etc.) avec dedans une ligne pour chaque mot ou groupe de mot. Voici comment le script prend aléatoirement la valeur d'une ligne pour la donner à une variable.

set fso = WScript.CreateObject("Scripting.FileSystemObject")
set fichier = fso.Opentextfile("nom.txt")
fichier.readall
Nombre = fichier.line - 1
fichier.close

NombreSecondes = (((right(time,2))+(left((right(time,5)),2)))/2)
i = 0
for i=1 to NombreSecondes
randomize
x = int(rnd*Nombre)
next
set fso = WScript.CreateObject("Scripting.FileSystemObject")
set fichier = fso.Opentextfile("nom.txt")
i = 0
for i = 0 to x
fichier.skipline
next
Nom = fichier.readline
fichier.close


Bien qu'efficace, ma manière d'obtenir de l'aléatoire est un peu tordue, donc je l'explique. D'abbord, je donne à ma variable NombreSecondes une valeure en fonction des secondes de l'heure qu'il est. Puis, le script donne une valeur aléatoire à x, comprise entre 1 et le nombre de lignes du fichier (variable Nombre), mais le fait un nombre de fois définie par la variable NombreSecondes. Ainsi il ne me sort pas toujours la même suite de chiffre comme il le ferait si j'utilisais juste x = int(rnd*Nombre) tout seul. Enfin, il saute un nombre de ligne équivalent à la valeur de x et donne à la variable Nom la valeur de la ligne sur laquelle il se trouve.
Si vous avez une solution plus simple et surtout moins gourmande en ressources pour le serveur pour obtenir de l'aléatoire je suis preneur. wink

Il fait ça pour chaque mot puis les assemble en une phrase et l'affiche dans une msgbox. Sur le site je ne veux pas qu'il affiche ça dans une msgbox mais comme du texte normal de la page.

Merci de votre aide.

2

avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

Comme l'a "dit" Kevin, c'est parceque tu n'utilise pas bien la fonction rand que tu en viens à utiliser ta méthode avec le nombre de secondes; il serait plus efficace d'initialiser le générateur de nombres aléatoires (je ne connais pas le vbs, mais google doit pouvoir indiquer comment faire sans trop de problèmes) pour qu'il fonctionne correctement et retourne des suites de nombres plus imprévisibles que ce que tu as pour l'instant.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

Ok, merci pour cette précision je vais changer ma méthode dans le vbs alors.

Pour ce qui est de convertir le script en php, j'ai trouvé comment lire dans un fichier mais je n'arrive à lire une ligne au hasard dans le fichier.

5

ça n'est pas la solution la plus optimisée mais elle a le mérite d'être simple :

$lines = explode ("\n", file_get_contents ('tonfichier.txt'));
$line = trim ($lines[mt_rand (0, count ($lines) - 1)]);


Si tu n'est pas familiarisé avec le PHP : la première instruction lit l'intégralité du fichier et découpe les lignes pour les mettre dans un tableau, la seconde récupère aléatoirement l'une de ces lignes (en supprimant éventuellement les caractères spéciaux qui y sont restés). Pas besoin d'initialiser le générateur de nombres aléatoires, c'est automatique en PHP.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

Merci je vais essayer.

Moi j'ai trouvé ça :
$fichier = file('fichier.txt');
$total = count($fichier);
$i = mt_rand(0, $total);
echo $fichier[$i];

Ca marche mais de temps en temps ça me renvoie du vide. Pourtant il n'y a aucune ligne vide dans mon fichier.

7

avec $total-1 ?
avatar
納 豆パワー!
I becamed a natto!!!1!one!

8

ah oui j'avais oublié qu'il existait aussi "file" qui renvoyait directement dans un tableau; dans ce cas il suffit de remplacer la 1ere ligne de ./5 par "$lines = file ('tonfichier.txt');".
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

9

Ton code ne me renvoie rien du tout @Zephyr.

Par contre celui-ci fonctionne à merveille maintenant :
$fichier = file('fichier.txt');
$total = count($fichier) - 1;
$i = mt_rand(0, $total);
echo $fichier[$i];

donc je vais le garder.

Comment je fais pour ajouter à la ligne des espaces et des points ? Dans le vbs je faisais juste phrase = phrase + " " ou "." ou ", " mais apparement php n'accepte pas cette syntaxe.

10

Qu'est-ce que tu appelles "renvoyer" ? Parceque le code que j'ai posté fonctionne très bien, mais si tu parles de l'affichage alors il manque juste un "echo", et sans lui seuls des calculs sont effectués sans aucun résultat visible. Sinon pour concaténer des chaines en PHP, c'est l'opérateur ".", mais tu devrais faire un tour sur http://www.php.net si tu comptes coder en PHP.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

Je suis bête... mur

J'ai ajouté "echo $line;" et ça fonctionne.

Merci à tous pour vos réponses.

12