informaticaPC

Tutorial de PHP

Leer archivos de texto, archivos de texto delimitado

Leer archivos de texto

La función de PHP fread() nos devolverá una cadena de texto con el contenido leído desde el archivo que le indiquemos como primer parámetro.

Como segundo parámetro opcional, podemos indicar el número de bytes que se deben leer (si necesitamos leer todo el archivo podemos usar la función filesize()).

Tras usar fread() el puntero al archivo quedará en la última posición leída: la función: de ser necesario usaremos rewind() para volver a situarlo al principio del mismo.

Según la documentación oficial de PHP, en sistemas operativos que diferencian entre archivos de texto y archivos binarios (como Windows) se recomienda abrir el fichero usando el modificador b.

<?php
    // Abrir el archivo en modo de sólo lectura:
    $archivo = fopen("datos.txt","rb");

    if( $archivo == false ) {
      echo "Error al abrir el archivo";
    }
    else
    {
        $cadena1 = fread($archivo, 18); // Leemos un determinado número de caracteres
        rewind($archivo);   // Volvemos a situar el puntero al principio del archivo
        $cadena2 = fread($archivo, filesize("datos.txt"));  // Leemos hasta el final del archivo

        if( ($cadena1 == false) || ($cadena2 == false) )
            echo "Error al leer el archivo";
        else
        {
            echo "<p>\$contenido1 es: [".$cadena1."]</p>";
            echo "<p>\$contenido2 es: [".$cadena2."]</p>";
        }
    }

    // Cerrar el archivo:
    fclose($archivo);
?>

Descargar ejemplo

Crear, abrir y cerrar un archivo en PHP

Aparte de fread() nos puede resultar muy útil file_get_contents(), puesto que con ella podemos obtener todo el contenido del archivo en una cadena de texto, pudiendo también indicarle la posición inicial a partir de la que deseamos extraer el texto (comenzando desde cero), y el número de caracteres a obtener. Devuelve false en caso de error.

<?php
    $cadena = file_get_contents("datos.txt");
    echo "<p>\$cadena es [".$cadena."]</p>";

    $cadena = file_get_contents("datos.txt", null, null, 3, 12);
    echo "<p>Ahora \$cadena es [".$cadena."]</p>";
?>

Descargar ejemplo

Otra función que te puede resultar interesante es file(), con la que obtendremos un array que contendrá cada línea de texto del archivo en una posición del mismo. Devuelve false si se ha producido un error.

<?php
    $aCadena = file("datos.txt");
    print_r($aCadena);
?>

Descargar ejemplo

Crear, abrir y cerrar un archivo en PHP

Aparte de las ya comentadas, también podemos utilizar fgets() y fgetss() que nos devolverá una cadena de texto con el contenido de la línea en la que se encuentra el puntero al archivo. La diferencia entre ambas es que fgetss() limpará los caracteres HTML encontrados (si los hay). Ambas devuelven false en caso de error.

<?php
    // Abrir el archivo en modo de sólo lectura:
    $archivo = fopen("datos.txt","rb");

    // Recorremos el archivo mostando el contenido de cada línea:
    while( feof($archivo) == false )
    {
      echo fgets($archivo). "<br />";
    }

    fclose($archivo);
?>

Finalmente, otra función de la que disponemos es fgetc(), que lee un carácter desde el archivo.

Descargar ejemplo

Información

Es recomendable comprobar si las operaciones realizadas con las funciones de archivos explicadas se han realizado correctamente (mediante los valores que devuelven en caso de error).

Más información

Vea también: [ fread() ] - [ file_get_contents() ] - [ file() ] - [ fgets() ] - [ fgetss() ] - [ fgetc() ] - [ filesize() ] - [ rewind() ] - [ feof() ]

Archivos de texto delimitado

Los archivos de texto delimitado o csv son archivos de texto normales en los que se utiliza un determinado carácter para separar cada campo, como en el siguiente ejemplo en el que los datos de cada línea se encuentran separados mediante punto y coma:

Archivo de texto delimitado csv

Para el manejo de archivos de texto delimitado o csv disponemos de las funciones de PHP fgetcsv() y fputcsv(), con las que podremos leer y escribir en ellos respectivamente, si bien podemos usar también las explicadas anteriormente como fwrite(), fread(), etc.

A continuación te mostramos un ejemplo de cómo escribir en un archivo pasando como parámetro a fputcsv() tanto o una cadena de texto como un array, que contienen los datos que se desean escribir:

<?php
    $linea  = "Antonia,Martel,Calvo,http://www.antoniamc74924.com/";
    $aDatos = array("Rosa", "Castellano", "Herrera", "http://www.rosach3729023.com/");

    // Abrimos el archivo situando el puntero al final del archivo:
    $archivo = fopen( "datos.csv", "ab" );

    fputcsv( $archivo, split(",", $linea), ";" );
    fputcsv( $archivo, $aDatos, ";" );

    fclose( $archivo );
?>

Descargar ejemplo

El archivo csv quedaría:

Archivos csv

Observa que como tercer parámetro podemos indicar el carácter delimitador que debe escribirse en el archivo delimitado o csv.

En caso de que hubiesen espacios en un campo éste será escrito entre comillas dobles en el archivo de texto, como puedes ver en el siguiente ejemplo:

<?php
    $linea  = "Antonia;Martel H;C/Cuadrada,8;http://www.antoniamh74924.com/";
    $aDatos = array("Pedro", "Ramírez Quevedo", "C/Redonda,7", "http://www.pedrorq89876.com/");

    // Abrimos el archivo (si existe será sobreescrito):
    $archivo = fopen( "datos.csv", "w+b" );

    fputcsv( $archivo, split(";", $linea), ";" );
    fputcsv( $archivo, $aDatos, ";" );

    fclose( $archivo );
?>

Descargar ejemplo

Archivo de texto csv

Si queremos usar otro carácter podemos indicarlo en un cuarto parámetro (opcional):

<?php
    $aDatos = array("Rosa", "Castellano Herrera", "", "http://www.rosach3729023.com/");

    // Abrimos el archivo situando el puntero al final del archivo:
    $archivo = fopen( "datos.csv", "ab" );
    fputcsv( $archivo, $aDatos, ";", "-" );
    fclose( $archivo );
?>

Descargar ejemplo

Si lo que deseamos es que no se use ningún carácter podemos utilizar la función fwrite().

Para obtener los datos de un archivo csv o delimitado usaremos fgetcsv() pasándole como parámetro un puntero al archivo abierto con fopen() y como segundo parámetro (opcional) el número de caracteres a leer, debiendo ser un número mayor que la longitud de la línea más larga (no se leerán caracteres de otra línea). En PHP 5 este parámetro ya no es necesario (aunque será ligeramente más lento).

Como tercer y cuarto parámetros (opcionales también) podemos indicar el carácter delimitador y el carácter de cierre, respectivamente.

Si fgetcsv() encuentra una línea en blanco se devolverá un array conteniendo un sólo campo con valor null, no siendo considerado como un error.

Veamos a continuación un ejemplo:

<?php
    $archivo = fopen( "datos.csv", "rb" );

    // Leer la primera línea:
    $aDatos = fgetcsv( $archivo, 100, ";");
    print_r( $aDatos );

    echo "<br />";

    // Tras la lectura anterior, el puntero ha quedado en la segunda línea:
    $aDatos = fgetcsv( $archivo, 100, ";" );
    print_r( $aDatos );
    echo "<br />-------------------------------------<p />";

    // Volvemos a situar el puntero al principio del archivo:
    fseek($archivo, 0);

    // Recorremos el archivo completo:
    while( feof($archivo) == false )
    {
        $aDatos = fgetcsv( $archivo, 100, ";");

        echo "Nombre: ".$aDatos[0]."<br />";
        echo "Apellido 1: ".$aDatos[1]."<br />";
        echo "Apellido 2: ".$aDatos[2]."<br />";
        echo "WEB: ".$aDatos[3]."<br />";

        echo "--------------------------<br />";
    }

    fclose( $archivo );
?>

Descargar ejemplo

Información

Es recomendable comprobar si las operaciones realizadas con las funciones de archivos explicadas se han realizado correctamente (mediante los valores que devuelven en caso de error).

Información

No existe una especificación estándar sobre cómo crear archivos en formato csv.

Más información

Vea también: [ fgetcsv() ] - [ fputcsv() ] - [ fwrite() ] - [ fseek() ]

Más información

Vea también: [ Archivos csv (en inglés) ]

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso