Contrôler les caractères au fur et à mesure qu'ils arrivent serait plus élégant (mais il faut quand même passer par un buffer, sinon les accès disque par caractère, ça suxx)
Tu peux aussi faire un buffer avec un décalage (genre de FIFO) AZERT ZERTY ERTYU ton buffer faisant la longueur de la chaine que tu recherches.
(c'est peut-être le plus joli en fait).
07 juin 2007 à 16:24
LeChat a écrit
Contrôler les caractères au fur et à mesure qu'ils arrivent serait plus élégant (mais il faut quand même passer par un buffer, sinon les accès disque par caractère, ça suxx)
Tu peux aussi faire un buffer avec un décalage (genre de FIFO) AZERT ZERTY ERTYU ton buffer faisant la longueur de la chaine que tu recherches.
(c'est peut-être le plus joli en fait).
Heu... non, les deux solutions que tu proposent sous-entendent de lire caractère par caractère... ce qui n'est PAS performant. Du tout.
07 juin 2007 à 16:27
Kane a écritLeChat a écrit
Contrôler les caractères au fur et à mesure qu'ils arrivent serait plus élégant (mais il faut quand même passer par un buffer, sinon les accès disque par caractère, ça suxx)
Tu peux aussi faire un buffer avec un décalage (genre de FIFO) AZERT ZERTY ERTYU ton buffer faisant la longueur de la chaine que tu recherches.
(c'est peut-être le plus joli en fait).
Heu... non, les deux solutions que tu proposent sous-entendent de lire caractère par caractère... ce qui n'est PAS performant. Du tout.
Je t'ai dit qu'il fallait lire par buffer avant.
Dernière modification le 07/06/07 à 16:30 par LeChat
07 juin 2007 à 16:30
hahaha, mais justement ! le problème se pose lorsque la chaine est entre deux lecture du buffer !
07 juin 2007 à 16:33
Kane a écrit
hahaha, mais justement ! le problème se pose lorsque la chaine est entre deux lecture du buffer !
gni !
Tu lis un buffer, tu injectes le buffer dans une FIFO de la longueur de la chaine recherchée, si tu trouves, tu remplaces, tu décales la FIFO (en l'alimentant à travers le buffer de lecture, avec les données sortant de la FIFO tu alimentes un buffer servant à l'écriture (je préfère précises aussi le buffer de sortie :)
L'alimentation de la FIFO et le décalage se faisant par caractère mais via les buffers.
EDIT : Note que quand tu remplaces, tu peux décaler la FIFO de tous les caractères et non d'un seul :)
Dernière modification le 07/06/07 à 16:45 par LeChat
07 juin 2007 à 16:35
Voilà pourquoi j'ai arrêté la prog (ça et le COBOL, et l'AS/400, et...)
07 juin 2007 à 16:39
JiHeM a écrit
Voilà pourquoi j'ai arrêté la prog (ça et le COBOL, et l'AS/400, et...)
Pourtant c'est rigolo, on te pose un problème et tu cherches l'algo qui correspond à sa résolution.
Et vu qu'il y a une infinité de solutions, tu cherches la plus jolie.
Dernière modification le 07/06/07 à 16:46 par LeChat
07 juin 2007 à 16:46
Ah mais la pure résolution de problèmes j'aime bien, en Prolog par exemple, c'est un des rares domaines qui me passionnait. Mais quand le problème c'est "informatise nous toute la gestion des commandes et des livraisons en 3 mois avec tel langage pourri", non merci :)
07 juin 2007 à 17:06
Je connais rien au php. le $fp c'est ton pointeur de fichier?
Si tu le décrémentes de x(=longueur de la chaine recherchée - 1) avant de récupérer le bloc suivant, tu gardes les derniers octets du bloc précédent au début du suivant, comme ça tu risques pas de rater ta chaîne.
07 juin 2007 à 17:06
ah ouais mais l'informatique de 1980 je dis non, l'homme est amené à s'élever et à utiliser des fonctions toutes faites pour ce genre de problèmes :)
07 juin 2007 à 17:12
Cyp a écrit
ah ouais mais l'informatique de 1980 je dis non, l'homme est amené à s'élever et à utiliser des fonctions toutes faites pour ce genre de problèmes :)
Moi je dis : \o/ C-ANSI rulez ! \o/
07 juin 2007 à 17:16
Moi je dis Java / C# / Ruby rulez. Mais jle dis pas trop fort parce que ca fait très geek de défendre un langage.
07 juin 2007 à 17:19
Dableuf a écrit
Je connais rien au php. le $fp c'est ton pointeur de fichier?
Si tu le décrémentes de x(=longueur de la chaine recherchée - 1) avant de récupérer le bloc suivant, tu gardes les derniers octets du bloc précédent au début du suivant, comme ça tu risques pas de rater ta chaîne.
Heuuuu ouai... putain, pourquoi je n'y ai pas pensé plus tôt!
merci !
(putain, j'ai vachement perdu en prog, a force de ne plus faire que des scripts)
ça donne :
$fp = fopen( www.exemple.com/fichier_a_lire, 'r', false, $context);
if (!$fp) {
echo "$errstr ($errno)
\n";
} else {
$end="Chaine de remplacement";
while (!feof($fp)) {
$data= fgets($fp, 10000);
$data=str_replace("Chaine a remplacer","Chaine de remplacement",$data);
echo substr($data,18);
$end= substr($data,-18);
}
}
fclose($fp);
}Bon, maintenant c'est moins performant... j'ai rajouté 2 fonction substr et une concaténation...
Dernière modification le 07/06/07 à 17:25 par Kane
07 juin 2007 à 17:23
Cyp a écrit
Moi je dis Java / C# / Ruby rulez. Mais jle dis pas trop fort parce que ca fait très geek de défendre un langage.
Bah alors je dis Haskell : url : http://www.haskell.org/haskellwiki/Haskell
Là ça fait geek !
07 juin 2007 à 17:24
Brainfuck ou Ook!, ça c'est vraiment geek.
07 juin 2007 à 17:38
JiHeM a écrit
Brainfuck ou Ook!, ça c'est vraiment geek.
Et merde t'es pas en Mongolie!
07 juin 2007 à 17:44
Pas encore, mais c'est gentil de penser à moi.
07 juin 2007 à 17:46
Kane a écrit
(putain, j'ai vachement perdu en prog, a force de ne plus faire que des scripts)
Hu ? Bordel, je ne programme plus non plus, je scripte la plupart du temps (Bash / awk / ... powa). Je risque la même chose ?
Enfin bon je donne tout de même des cours de C à mes étudiant(e)s j'ai toujours des bases fraîches.
Tiens d'ailleurs ton problème pourra devenir un bon sujet d'exercice.
07 juin 2007 à 18:33
Dableuf a écrit
Y'a pas d'équivalent de fseek en php?
fseek ne peut pas être utilisé sur les pointeurs retournés par fopen s'ils sont au format HTTP ou FTP.
Et j'ouvre un flux HTTP.
07 juin 2007 à 18:35
Sinon, le Perl ça roxx pas mal aussi (c'est du compilé à l'exécution). Il y a dans ce langage des fonctionnalités d'une puissance assez sympathique.
(genre des tables de hachage et des chargements de données dans des tableaux...)
Dernière modification le 07/06/07 à 18:38 par LeChat
07 juin 2007 à 18:36
![]()
Dernière modification le 07/06/07 à 18:41 par Kane
07 juin 2007 à 18:40
Kane a écritDableuf a écrit
Y'a pas d'équivalent de fseek en php?
fseek ne peut pas être utilisé sur les pointeurs retournés par fopen s'ils sont au format HTTP ou FTP.
Et j'ouvre un flux HTTP.
Le net c'est caca...
08 juin 2007 à 09:03
JiHeM a écrit
Ah mais la pure résolution de problèmes j'aime bien, en Prolog par exemple
Tu plaisantes hein ? Je peux pas penser qu'un être humain est capable d'aimer la programmation logique.
C'est sympa pour des petits problèmes ridicules mais dès qu'on s'attaque à quelque chose de plus conséquent c'est à se tirer des balles quand même.
08 juin 2007 à 15:37
Non je suis sérieux :)
Après c'est sûr que j'ai fait que des petits problèmes du genre optimisation des chutes de bois dans une scierie ou du trajet d'un voyageur de commerce ou encore le classique zèbre, jamais codé un vrai système expert décisionnel.
08 juin 2007 à 16:01
JiHeM a écrit
Non je suis sérieux :)
Après c'est sûr que j'ai fait que des petits problèmes du genre optimisation des chutes de bois dans une scierie ou du trajet d'un voyageur de commerce ou encore le classique zèbre, jamais codé un vrai système expert décisionnel.
Si tu es vraiment masochiste, essaye le LISP.
08 juin 2007 à 16:03
Répondre au sujet
Vous devez être identifié pour participer à ce topic.

Satan m'habite