varios valores txt texto mostrar manejo linea leer especifica ejemplos archivos archivo php text-parsing

valores - PHP-analizando un archivo txt



leer y mostrar archivo de texto en php (9)

Me gustaría contribuir con un archivo que proporcione estructuras de datos atómicos.

$lines = file(''some.txt''); $keys = explode(''^'', array_shift($lines)); $results = array_map( function($x) use ($keys){ return array_combine($keys, explode(''^'', trim($x))); }, $lines );

Tengo un archivo .txt que tiene los siguientes detalles:

ID^NAME^DESCRIPTION^IMAGES 123^test^Some text goes here^image_1.jpg,image_2.jpg 133^hello^some other test^image_3456.jpg,image_89.jpg

Lo que me gustaría hacer es analizar este anuncio, obtener los valores en un formato más legible, posiblemente en una matriz si es posible.

Gracias


Mi solución

function parseTextFile($file){ if( !$file = file_get_contents($file)) throw new Exception(''No file was found!!''); $data = []; $firstLine = true; foreach(explode("/n", $file) as $line) { if($firstLine) { $keys=explode(''^'', $line); $firstLine = false; continue; } // skip first line $texts = explode(''^'', $line); $data[] = array_combine($keys,$texts); } return $data; }


Ok, no vi la versión editada, así que aquí está un rehacer. Es muy probable que sea un archivo CSV que usa carets como separador, así que ...

$fh = fopen(''yourfile.txt''); $headers = fgetcsv($fh, 0, ''^''); $details = array(); while($line = fgetcsv($fh, 0, ''^'')) { $details[] = $line; } fclose($fh);


Por mucho, el mejor y más simple ejemplo de esto que he encontrado es simplemente el método file ().

$array = file("myfile"); foreach($array as $line) { echo $line; }

Esto mostrará todas las líneas en el archivo, esto también es aplicable para una URL remota.

Sencillo y claro.

REF: IBM PHP Parse



Utilice explode() o fgetcsv() :

$values = explode(''^'', $string);

O, si quieres algo más bonito:

$data = array(); $firstLine = true; foreach(explode("/n", $string) as $line) { if($firstLine) { $firstLine = false; continue; } // skip first line $row = explode(''^'', $line); $data[] = array( ''id'' => (int)$row[0], ''name'' => $row[1], ''description'' => $row[2], ''images'' => explode('','', $row[3]) ); }


Utilice una lista y divida "image_1.jpg, image_2.jpg" después de explotar la cadena:

list($number, $status, $text, $images) = explode("^", $data); $splited_images= preg_split('','', $images);


Puedes hacerlo fácilmente de esta manera

$txt_file = file_get_contents(''path/to/file.txt''); $rows = explode("/n", $txt_file); array_shift($rows); foreach($rows as $row => $data) { //get row data $row_data = explode(''^'', $data); $info[$row][''id''] = $row_data[0]; $info[$row][''name''] = $row_data[1]; $info[$row][''description''] = $row_data[2]; $info[$row][''images''] = $row_data[3]; //display data echo ''Row '' . $row . '' ID: '' . $info[$row][''id''] . ''<br />''; echo ''Row '' . $row . '' NAME: '' . $info[$row][''name''] . ''<br />''; echo ''Row '' . $row . '' DESCRIPTION: '' . $info[$row][''description''] . ''<br />''; echo ''Row '' . $row . '' IMAGES:<br />''; //display images $row_images = explode('','', $info[$row][''images'']); foreach($row_images as $row_image) { echo '' - '' . $row_image . ''<br />''; } echo ''<br />''; }

Primero abra el archivo de texto con la función file_get_contents() y luego corte la cadena en los caracteres de nueva línea usando la función explode() . De esta manera obtendrá una matriz con todas las filas separadas. Luego, con la función array_shift() puede eliminar la primera fila, ya que es el encabezado.

Después de obtener las filas, puede recorrer la matriz y colocar toda la información en una nueva matriz llamada $info . Entonces podrá obtener información por fila, comenzando en la fila cero. Entonces, por ejemplo, $info[0][''description''] sería Some text goes here .

Si también desea colocar las imágenes en una matriz, también puede usar explode() . Solo use esto para la primera fila: $first_row_images = explode('','', $info[0][''images'']);


<?php $row = 1; if (($handle = fopen("test.txt", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, "^")) !== FALSE) { $num = count($data); echo "<p> $num fields in line $row: <br /></p>/n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "<br />/n"; } } fclose($handle); } ?>