Recherche d'un mot 'exact' d'une chaine avec $search_string

Nouveau WRInaute
Bonjour à tous,


pour une fonction $search_string je recherche le code pour extraire un mot exact d'un fichier .txt, si par exemple dans mon fichier .txt j'ai ces " lignes : fichier2 & fichier23 & fichier32 mon code ci-dessous va aléatoirement me sortir un résultat d'une de ces 3 lignes alors que je voudrai que si je fais un $search_string sur fichier23 il me sorte le résultat du fichier23


code:

<?
$lines_array = file("nbre_pages_pdf.txt");
$search_string = $pdf;

foreach($lines_array as $line) {
if(strpos($line, $search_string) !== false) {
list(, $new_str) = explode(":", $line);
// If you don't want the space before the word bong, uncomment the following line.
$new_str = trim($new_str);
}
}

echo "( Document final de&nbsp:&nbsp".$new_str."&nbsppages )" ;
?>


merci pour votre réponse
 
Nouveau WRInaute
fichier .txt :

fichier1: 2
fichier2: 23
fichier3: 32


je remets le code php :

<?php
$lines_array = file("fichier.txt");
$search_string = "fichier2";
foreach($lines_array as $line)
{
if(strpos($line, $search_string) !== false)
{
list(, $new_str) = explode(":", $line);
}
}
echo $new_str;
?>
 
WRInaute impliqué
Comme personne ne te répond : utilise ChatGPT pour ce genre de choses, ça peut être une bonne aide.
Sinon, pour débuguer, fais toi-même le parcours de ta boucle comme un ordi :
Tu testes si fichier "fichier2" est en début de ligne.
Si tu le trouves, tu continues de traiter toutes les lignes suivantes
"fichier23" contient par "fichier2", donc ton ancien résultat est remplacé.

D'une part il faudrait arrêter de parcourir une fois la chaine trouvée, donc mettre un break; après le list().
Ensuite, tu vois bien que le test est hasardeux : si la ligne avec fichier23 se retrouve avant celle de fichier2, tu auras un faux résultat. Ce que tu devrais chercher, c'est quelque chose qui t'assures que c'est bien la ligne que tu veux, et donc chercher "fichier2:", puisqu'apparemment, tu as deux points après "fichierNombre".
En cherchant "fichier2:", tu ne risques plus d'avoir le résultat de "fichier23".

En bonus, comme apparemment c'est le début de la ligne, autant tester que c'est en début de ligne en faisant un strpos === 0 et pas simplement !== FALSE (ou même un str_starts_with si tu utilises PHP 8).
 
Nouveau WRInaute
bonjour,
merci pour ta réponse, j'ai essayé tes paramètres pour strpos mais ça ne donne pas de résultat concluant,
en attendant de trouver mieux j'ai écrit la chaine du fichier .txt en rajoutant un caractere special (*) à fichier2 => fichier2*
et dans le php j'ai écrit une condition si mot cherché 8 caractères => ajout *
ainsi j'ai bien le résultat du fichier2 et pas celui du fichier23 ou fichier24
c'est de la bidouille mais dans mon appli c'est assez simple à gérer,
en tout cas merci encore.
 
Discussions similaires
Haut