begin process at 2012 05 31 10:47:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Traduction d'une fonction PERL en PHP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Traduction d'une fonction PERL en PHP

jeudi 2 juillet 2009 à 09:08:51 | Traduction d'une fonction PERL en PHP

cds0671

Bonjour,

Quelqu'un pourrait-il m'aider à traduire cette fonction perl en language PHP ? Merci pour votre aide!!

sub long_string {

my $str = shift;
my $limit = 255;

# Return short strings
return $str if length $str <= $limit;

# Split the line at word boundaries where possible
my @segments = $str =~ m[.{1,$limit}$|.{1,$limit}\b|.{1,$limit}]sog;

# Join the string back together with quotes and Excel concatenation
$str = join '"&"', @segments;

# Add formatting to convert the string to a formula string
return $str = qq(="$str");
}



csd0671
vendredi 3 juillet 2009 à 14:47:28 | Re : Traduction d'une fonction PERL en PHP

nautilus99

Réponse acceptée !
bonjour,

public function long_string( $str = '', $limit = 255 )
{
   if ( strlen( $str ) <= $limit ) 
      return $str

   $words = explode( ' ', $str ) ;
   $seg = '' ;
   $segs = aray() ;

   foreach ( $words as $word ) {
      if ( ( strlen( $seg ) + strlen( $word) + 1 ) <= $limit ) {
        $seg .= $word . ' ' ;
      } else {
        $segs[] = $seg ;
        $seg = $word ;
      }
    }
    return implode( '&', $segs ) ;
}





lundi 6 juillet 2009 à 09:44:22 | Re : Traduction d'une fonction PERL en PHP

cds0671

Bonjour nautilus et merci beaucoup pour ton aide.
J'ai juste quelques précisions à te demander !
Je ne comprend pas tout à fait ce que réalise ta boucle for each ? pourrais tu stp mettre des commentaires aux lignes de codes, car par exemple lors de l'appel de la fonction tu note   
long_string( $str = '', $limit = 255 )
$str='' !!! ça change quoi par rapport lorsqu'on passe $str tout simplement ?? c'est quoi la différence?

Cette fonction doit pouvoir me permettre de faire une extraction Excel en contournant le problème des 255 caractères max par cellule, pour celà j'utilise les class "writeexcel" et je dois retourner une formule et donc mettre un égale devant la chaine retournée !! comment dois-je faire stp ?

Merci vraiment pour ton aide

csd0671
lundi 6 juillet 2009 à 10:37:11 | Re : Traduction d'une fonction PERL en PHP

nautilus99

Bonjour,

Et lerci pour les commentaires... et pour les précisions, bien que commenter un code PHP aussi basic ne soit pas évident:

function long_string( $str = '', $limit = 255 )
Bien que PHP, comme la plupart des langages interprétés, n'impose pas l'initialisation des variables ou paramètres, je garde la bonne vielle habitude du C et C°°, à savoir toujours initialiser une varaible et toujours donner une valeur par défaut à un paramètre. Par rapport à la simple déclaration de nom, on a pour seul changement que même en cas d'appel de la fonction sans lui passer d eparamètres, on a une chaine vide en tant qu evaleur de chaine. De plus, en nommant et initialisant les paramètres, on obtient dans l'appel de la fonction, un équivalent des 2 variables locales my du Perl.

$words = explode( ' ', $str ) ;
foreach ( $words as $word ) {

La boucle foreach de PHP est identique à celle du Perl. Ici, on a transformé la chaine passée en entrée en un tableau de mots, le explode étant sur le caractère espace.

if ( ( strlen( $seg ) + strlen( $word) + 1 ) <= $limit ) {
        $seg .= $word . ' ' ;
      } else {
        $segs[] = $seg ;
        $seg = $word . ' ' ; // espace rajouté après relecture
      }

On commence par tester si la longueur du segment de chaine en cours + la longueur du mot courant + l'espace reste < à 255 caractères.

Si oui, on rajoute le mot plus un espace au segment courant.

Sinon, on insère le segment courant à la fin du tableau des segments et on initialise le segment courant avec le mot (et un espace, désolé, je l'avais oublié lors de l'écriture rapide de ton équivalence).

Enfin, pour retourner une chaine avec un "=" devant, il suffit, dans le return d eta fonction, de concaténer l'ensemble avec l'opérateur de concaténation de chaine d ePHP, le '.', ce qui donne:

return '=' . implode( '&', $segs ) ;
La syntaxe de PHP est assez directe et très compréhensible, pour peu que l'on ait de bonnes bases en C/C++, voire en Perl, PHP ayant largement emprunté à ces langages dans sa définition.



lundi 6 juillet 2009 à 11:05:19 | Re : Traduction d'une fonction PERL en PHP

cds0671

Super merci beaucoup mais j'ai encore une question désolé loll

Lorsque ma chaine de caractère est supérieure à 255, je ne comprend pas mais lorsque je fait un echo implode(', ',$segs); par exemple pour tester,
ce que je récupère c'est uniquement les 255 premiers caractères pas les suivants ? pourrait tu stp me dire pr quoi ?

Merci encore pour ton aide, vraiment merci beaucoup

csd0671


Cette discussion est classée dans : fonction, string, str, limit, perl


Répondre à ce message

Sujets en rapport avec ce message

SPLIT [ par fatNugly ] y'a t'il une fonction en php qui fait la meme chose que la fonction split en vb soitune fonction a laquelle on donne le nom du string ansi que le cara Fonction contraire de str_replace [ par redpooka ] Existe-t-il une fonction qui fasse le contraire de str_replace ?Qui au lieu de remplacer les caractèrs définit, remplace les caractères non définit ?P Espace blanc ... [ par benjiman2 ] Bonjour , voila je voudrais remplacer les espace entrée dans un input par rien du tout .c'est a dire que si :$string = "je suis benjiman"je voudrais q fonction highlight_string [ par damish ] salut!je vien il y a quelques heures de finir mon site tout fonctione parfaitement en local mais lorsque je l'est publier il m'ecris une erreur a la p Vidage de chaine [ par boomslang ] salut :)j'ai cherché sans resultat une fonction qui permeterai de vider le contenu d'une chaine caractere ou autres... alors j'ai fait une fonction :f Combiner Eregi et une fonction [ par Evangun ] Bonsoir! Cela fait 3 heures que j'essaie de comprendre pourquoi eregi refuse d'utiliser la fonction "incrementer" dans l'exemple suivant... en gros je Ne pas interpreter les \ et ' et " [ par MadM@tt ] Salut à tous Voilà j'ai un module de commentaire, et j'aimerais faire en sorte que ce que j'écrive en commentaire ne soit pas interpreté par php. Voi fonction str_replace [ par aureludo ] Bonsoir,voilà je suis en train de créer un moteur de recherche pour mon site ce dernier fonctionne très bien. Pour l'affichage des résultats je met en probleme avec la fonction str_replace [ par hajeur_abd ] bonjourj'ai récuperé le chemin d'acces d'un fichier dans une variable et je veu remplacer les anti-slash par des des slash.voila le code que j'ai tapé Fonction str_shuffle! [ par jnbrunet ] Salut, voilà sur mon site, je dois générer une clef du genre:$numero = "01234567890123456789"; $clef = str_shuffle($numero);Bon, le problème est que l


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,484 sec (3)

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