2010-12-13 13 views
2

Comment puis-je découper un morceau de texte à partir d'un fichier texte en PHP. Par exemple, je veux supprimer les lignes 0-50 et les transformer en une chaîne. Peut-être même mettre un formatage html là-bas. Je sais déjà quelles lignes je dois découper je ne sais juste pas comment les sélectionner et les mettre dans une ficelle.PHP - Comment découper un bloc de lignes dans un document texte?

+0

Comment vos lignes sont-elles délimitées? Des retours difficiles? Si c'est le cas, vous pouvez exploser() votre chaîne dans un tableau et ensuite prendre les 50 premières lignes (0-49) du tableau. – CrowderSoup

+0

Voici une question très similaire, Comment obtenir les 20 premières lignes d'un fichier texte: http://stackoverflow.com/questions/4410077/remove-all-lines-except-first-20-using-php/4410128#4410128 –

+0

@Surreal C'est une question différente quand il s'agit de couper des blocs arbirtraires hors du texte – Gordon

Répondre

1

exploser sur une nouvelle ligne et afficher les valeurs de tableau de 0 à 50.

+0

exploser n'est pas très efficace lorsque vous avez de gros fichiers. Outre le problème de vitesse possible, vous avez besoin de deux fois plus de mémoire pour le faire. Mieux vaut lire ligne par ligne à l'aide de fgets ou utiliser la fonction file() comme le suggère Oliver A. –

+0

vous battre à elle. ;) – DampeS8N

3

Utilisez le fichier ($ filename). Le résultat est un tableau dans lequel chaque élément est une ligne de votre fichier. Exemple:

$lines = file("foo.txt"); 
//extract desired lines 
$lines = array_slice($lines,19,21); 
$string) implode("\n",$lines); 
+0

http://php.net/manual/fr/function.file.php –

+1

ouais, vous avez raison. Laissez-moi le penser. – DampeS8N

0

approche moins intensive mémoire:

$fileObject  = new SplFileObject('yourFile.txt'); 
$fileIterator = new LimitIterator($fileObject, 0, 49); 
$firstFiftyLines = implode(iterator_to_array($fileIterator)); 

ou comme une alternative

$fileObject  = new SplFileObject('yourFile.txt'); 
$fileIterator = new LimitIterator($fileObject, 0, 49); 
$firstFiftyLines = ''; 
foreach ($fileIterator as $currentLine) { 
    $firstFiftyLines .= $currentLine; 
} 

Si vous avez besoin d'autres lignes, changer le deuxième et le troisième argument à la LimitIterator. Le premier est le décalage de départ, le deuxième compte de l'itération (dans ce contexte, les lignes à lire).

Marquage CW réponse parce que la question (et réponse) est un double de Read a file from line X to line Y?

1

Ouvrez le fichier avec fopen, lisez les 50 premières lignes à l'aide fgets.

$fp = fopen('myfile.txt', 'rt'); 
if ($fp) 
{ 
    for ($i = 0; $i < 50; $i++) 
    { 
     $s = fgets($fp); 
     ...add error checking and do something with the line here 
    } 
} 

Ceci est efficace même si vous devez lire les 50 premières lignes d'un fichier volumineux.