begin process at 2010 02 10 09:41:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > SNIPPET: $REPLACETXT

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


 Sources du même auteur

Source avec une capture HIGHLIGHT MANAGER V1.0

 Sources de la même categorie

COMMANDES FANTAISIES ( OP DEOP , VOICE DEVOICE ) ORIGINALES par Orona
Source avec Zip Source avec une capture CORRECTEUR par Orona
Source avec Zip Source avec une capture [DLL] DESSINER COMME LES PICWINS SUR UNE DIALOGBOX (BONUS: J... par uaip
Source avec Zip Source avec une capture [DLL] AJOUT D'UN CONTRÔLE RICHEDIT SCINTILLA SUR LES DIALOG... par uaip
Source avec Zip Source avec une capture WORLDDMT - GESTION DE CAISSE V 1.0 par WorldDMT

Commentaires et avis

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 ... :(

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

Commentaire de ReMi34 le 27/08/2004 10:23:48

while (%o: <= a:) {

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

Commentaire de tofu le 27/08/2004 13:14:38

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

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!

Commentaire de HeXoR le 30/08/2004 17:32:04

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

Commentaire de PaDa le 30/08/2004 18:44:35

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

Commentaire de Huitre le 30/08/2004 21:38:17

Ca change de $read ^^

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales