Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SNIPPET: $REPLACETXT


Information sur la source

Description

Utilisation:
//echo -a $replacetxt(fichier.txt,mot1,mot2)
Pour l'option fichier spécifié le fichier txt dans lequel se trouve mot1.
Pour l'option mot1 spécifié le mot a remplacer par mot2.
Pour l'option mot2 spécifié le mot pour remplacer mot1.
Le code retourne directement le nombre de fois se trouve mot1 dans le fichier txt.
Snippet entierement codé en hashtables!
Au début j'était parti pour le faire avec un simple write puis après je voulai utiliser le file handling(que je vien d'apprendre) mais je n'y arriver pas donc j'ai appris les hashtables et je l'ai codé.

 

Source

  • alias replacetxt { if ($hget(replacetxt)) { hfree replacetxt }
  • if $3 { var %xx $1, %x: $2, %x:: $3, %o: 0, %a: 1 | .hmake replacetxt 100 }
  • while (%o: <= a:) {
  • %H = $hfind(replacetxt,%a:).data
  • inc %x $regsub(%H,$3,%H)
  • hadd replacetxt %a: $2 %H
  • hsave -bo replacetxt %xx
  • inc %a:
  • }
  • return %x
  • }
alias replacetxt { if ($hget(replacetxt)) { hfree replacetxt }
  if $3 { var %xx $1, %x: $2, %x:: $3, %o: 0, %a: 1 | .hmake replacetxt 100 }
  while (%o: <= a:) {
    %H = $hfind(replacetxt,%a:).data
    inc %x $regsub(%H,$3,%H)
    hadd replacetxt %a: $2 %H
    hsave -bo replacetxt %xx
    inc %a:
  }
  return %x
}

Conclusion

Si bug dites le moi :D
Merci a PaDa pour son aide sur le forum =)
 

Commentaires et avis

signaler à un administrateur
Commentaire de PaDa le 27/08/2004 01:48:12

$regsub(%H,$3,%H)
> * Invalid parameters: $regsub (line *,******.mrc)
syntaxe : $regsub(ce dans quoi on cherche, mask , remplacement , var ) donc il manque un argument

Sinon c'est ptet astucieux d'utiliser les hashtables (j'ai pas pigé tout le remote la encore) mais je pense que tu t'y prends mal :
avec $hfind tu vas trouver la n-ième item matchant un text et ensuite tu réécris par dessus la N-ième item tout court (qui n'est pas forcément la même) donc bon ... (d'ailleurs il manque certainement un argument a $hfind)

sinon dans le principe , il est tard mais voila ce que je pige pas : tu fais un hmake pour ta table , ok . elle est vide . tu fais un $hfind ensuite (enfin si ya le bon nombre d'arguement mais je doute fortement) , la table est toujours vide . et ensuite tu sauves la table (toujours vide) dans le fichier de départ ... en admettant que celle ci ne soit pas vide tu la sauves en binaire (switch -b) c'est du vice lol :p

enfin la boucle est inutile puisqu'il n'y a pas plusieurs tours

reprends un ti peu ton code , cette facon de faire peut etre très intéressante je pense mais la c'est pas fonctionnel ...ou chu endormi ... :(

signaler à un administrateur
Commentaire de PaDa le 27/08/2004 02:28:32

je retire la boucle qui sert a rien :
%o: 0, %a: 1 puis while (%o: <= a:) et a chaque tour de boucle tu incrémentes %a: ... si yavait pas d'erreur de syntaxe avant -> freeze (1,2,3,4,...,10millions sont supérieurs a 0...)

vala le code de départ que je t'avais proposé sur le forum à epsilon près :
Alias replacetxt {
  var %x 0, %i 1 , %imax $lines($1) , %2 = $+(/,$2,/g,$prop) , %L
  while (%i <= %imax) {
    inc %x $regsub($read($1,%i),%2,$3,%L)
    write -l $+ %i $1 %L
    inc %i
  }
  return %x
}

voici une version file handling certainement très optimisable , utilisant deux fichiers :
Alias replacetxt {
  var %x 0, %2 = $+(/,$2,/g,$prop) , %L , %i 1 , %m $lines($1)
  .fopen txt1 $1
  .fopen -no txt2 tmp- $+ $1
  while %i <= %m {
    inc %x $regsub($fread(txt1),%2,$3,%L)
    .fwrite -n txt2 %L
    inc %i
  }
  .fclose txt?
  .copy -o tmp- $+ $1 $1
  .remove tmp- $+ $1
  return %x
}
(tofu avait posté un truc aussi , cf le forum , du file handling mais en bien plus court et propre je crois)
reprends ton code si tu peux , je suis impatient de voir une version corrigée en hashtables :)

signaler à un administrateur
Commentaire de ReMi34 le 27/08/2004 10:23:48

while (%o: <= a:) {

T'as oublié le % avant le a: :/

signaler à un administrateur
Commentaire de tofu le 27/08/2004 13:14:38

je maintiens que ça aurait été plus simple à faire avec le file handling .

signaler à un administrateur
Commentaire de _VeSpArO_ le 27/08/2004 23:41:05

Ok je vais reprendre le code dans les jours qui viennent :) merci PaDa je vais prendre en compte ce que tu m'as dis!

signaler à un administrateur
Commentaire de HeXoR le 30/08/2004 17:32:04

c le genre de truc qui doit ramer mechant avec un gros txt :/

signaler à un administrateur
Commentaire de PaDa le 30/08/2004 18:44:35

en file handling , 3secs pour un fichier de 20000 lignes :) c'est correct non?

signaler à un administrateur
Commentaire de Huitre le 30/08/2004 21:38:17

Ca change de $read ^^

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.