Necesito ayuda urgente.. Para leer un archivo .txt

Lo que deseo leer es un archivo que contiene una nomina del personal. Entonces trae cierto formato.. Vienen algunas lineas centradas, otras con margenes a la izquierda y si se imprime desde el editor de msdos. La imprime en una hoja tamaño carta. Pero cuando la leo a través de web, se hace más grande, y me muestra todo el listado, entonces necesito separar el contenido del archivo por centros de trabajo. Ayudame por favor. He visto en las preguntas contestadas tu manera de ayudar.. Te lo agradeceré. Gracias ya le he preguntado a tres expertos pero ninguno me contesta nada..

1 respuesta

Respuesta
1
Lo primero necesitas saber el formato que tiene ese archivo, es decir, cómo están colocados los datos. Primero puede haber un encabezado, luego una línea con los títulos de columnas de una tabla, luego las distintas líneas pertenecientes a esa tabla que forman el listado. Y necesitas tener algún delimitador para separar cada elemento. Como limitadores puedes usar un carácter especial o un determinado número de caracteres como varios espacios seguidos.
En php tienes funciones para leer ficheros de texto que te permiten leer líneas, palabras, frases, etc, sólo tienes que indicar cual va a ser el carácter que indica el final de cada bloque que tiene que leer. Eso te puede ayudar a buscar los datos que necesitas dentro del fichero, pero lo primero es saber su estructura y saber hasta donde hay que leer.
Necesitaría saber cual es esa estructura, o un ejemplo de fichero, y cuáles son los datos que te interesa obtener.
Hola Experto. te envío unas lineas del archivo .txt
16/03/2005 empresa particular de andale
Dirección de administración página: 1
15:38:17 subdirección de recursos humanos
listado de firmas por cheques del 16/03/2005 al 31/03/2005
nomina ordinaria qna 06/2005
personal operativo
Proyecto y actividad : 004 p038 servicios operativos financieros y de comunicaciones
zona de pago : 120
unidad : 4212 centro de guerrero
centro de distribución: 1212000001 chilpancingo gro. ORD-14-1-1-200506-4212
------------------------------------------------------------------------------------------------------------------------------------
FILIACION N O M B R E C L A V E -----P E R I O D O----- No. Cheque N E T O F I R M A
------------------------------------------------------------------------------------------------------------------------------------
AONE71062701 EFRAIN ANTONIO NOLASCO A01003 000001 16/03/2005 - 31/03/2005 000000000 1,723.29 _______________1
AONR69082901 ROSALBA ANTONIO NOLASCO A01009 000001 16/03/2005 - 31/03/2005 000000000 2,131.02 _______________2
AUML72110301 LETICIA AGUERO MARTINEZ A01009 000002 16/03/2005 - 31/03/2005 000000000 2,373.02 _______________3
Todas las lineas que están más abajo son nombres de empleados con el mismo formato. Espero te sirva. Para que me puedas ayudar. Gracias.
Te he creado un script para que puedas leer el fichero de texto.
- Si no tienes el fichero de texto en el servidor, hay que subirlo de alguna forma. En el script he creado un formulario suponiendo que el fichero no está en el servidor. Ese formulario te permite buscar el archivo a leer, enviarlo al servidor y luego procesarlo.
- Las primeras 15 líneas corresponden al nombre de la empresa, dirección, fechas, etc. Si las necesitas las puedes tratar también. Pero yo en script solo las salto.
- Entre cada empleado hay una línea en blanco que también es necesario saltar. Lo hago comprobando que su longitud no supera los dos caracteres, que suele ser lo que ocupa un salto de línea.
El funcionamiento del script consiste en abrir el fichero completo y leerlo en un vriable. Luego se va leyendo de esa variable cada línea. Si es mayor de las 15 primeras líneas, se pasa a procesarla. El procesamiento consiste en ver si es una línea en blanco, si no lo es, se crea un array con cada palabra de la línea. El array se llama $arrayDatos.
Por ejemplo, para el primer empleado tendrías:
$arrayDatos[0] -> "AONE71062701"
$arrayDatos[1] -> "EFRAIN"
$arrayDatos[2] -> "ANTONIO"
$arrayDatos[3] -> "NOLASCO"
$arrayDatos[4] -> "A01003"
$arrayDatos[5] -> "000001"
$arrayDatos[6] -> "16/03/2005"
$arrayDatos[7] -> "-"
$arrayDatos[8] -> "31/03/2005"
$arrayDatos[9] -> "000000000"
$arrayDatos[10] -> "1,723.29"
$arrayDatos[11] -> "_______________1"
El código es el siguiente:
<html> <head> <title> Leer datos de un fichero </title> </head> </body>
<?php
if (isset($_FILES['archivo'])){
$datos = $_FILES['archivo']['tmp_name'];
if (!move_uploaded_file($datos, "./" . $_FILES['archivo']['name'] )) {
echo "Error.";
} else {
$datos = "./" . $_FILES['archivo']['name'];
$contenido = file ( $datos );
lineasLeidas = 0
for( $i = 0; $i < sizeof( $contenido ); $i++) {
$linea = trim( $contenido[ $i ] );
lineasLeidas ++;
if (lineasLeidas > 15) { // Las priemras 15 líneas no corresponden a datos de empleados
if (sizeof($linea) > 2) {
$arrayDatos = explode(" ", $linea);
print_r( $arrayDatos );
}
}
}
unlink( $datos );
<?php
}
?>
</body> </html>
Hola Experto...
Si tengo el servidor en php. De hecho las páginas que tengo son en php, claro son páginas sencilllas de consultas y envío de información a través de formularios. Lo puse con extensión php y me manda un error en la linea 14
Parse error: parse error, unexpected '=' in C:\Apache\Apache2\htdocs\nomina.php on line 14
ahorita estoy haciendo pruebas en mi pc. tengo instalado apache, php y mysql en windows xp. el servidor lo tengo con linux. estoy fascinado con esto de php pero apenas comienzo. espero me comprendas.. gracias..
Hola Experto:
Mira con más molestias.. ya puse el código lo llame nomina.html lo ejecuto y me muestra en la parte de arriba del formulario muchas cosas del código. Bueno pero al buscar el archivo .txt lo selecciono y lo envío y no me hace nada. Me deja en el formulario nuevamente. No se si este haciendo algo mal.. si es así dímelo por favor. Te lo agradeceré.. gracias..
El script que te pasé es de php por lo que la extensión del archivo no puede ser html. Tienes que ponerle extensión php, por ejemplo llámale nomina.php, ya que con extensión html lo que hace el navegador es interpretar las etiquetas que conoce y el resto se las salta. Así te va a mostrar el código y no lo va a ejecutar que es lo que pretendemos.
Además de tener extensión php, lo tienes que ejecutar en un servidor que tenga soporte para php, no se ejecuta en la máquina cliente. Si en tu ordenador no tienes un servidor web con soporte php, no vas a poder ejecutarlo.
Como esta es la categoría de php he dado por supuesto que sabias esas cosas, pero tras leer tu ultima pregunta estoy dudando si vas a poder ejecutarlo. Supongo que el único problema que has tenido ha sido el cambio de la extensión, sino, tendrías que instalarte un servidor web como por ejemplo apache y ponerle soporte para php, o crearte una cuenta en algún servidor gratuito.
Hola Experto..
Sabes ya le corregí los errores.. que me comentas, ya me muestra el formulario. Selecciono el archivo lo envío . pero desgraciadamente no me manda ningún resultado. Solamente una página en blanco.. no se a que se deba. Espero no te desesperes y no estarte molestando mucho.. gracias..
Es cierto que el código tiene algunos errores sintácticos.
En la línea 14 donde pone:
lineasLeidas = 0
debería poner:
$ lineasLeidas = 0;
En la línea 17 donde pone:
lineasLeidas ++;
debería poner:
$lineasLeidas ++;
En la línea 18 donde pone:
if (lineasLeidas > 15) {
debería poner:
if ($lineasLeidas > 15) {
A simple vista el resto del código está correcto.
No me extraña que estés fascinado con php, porque es un lenguaje muy potente que te da muchas posibilidades a la hora de crear sitios web. Además, no es complicado y tiene una sintaxis muy similar al lenguaje c y javascript.
Esta vez si, le he quitado la parte que copiaba el archivo en el servidor ya que no funcionaba como debía, parece ser que según la configuración de php y de apache te lo guarda en un sitio u otro.
Aquí te pongo el código correcto:
<html> <head> <title> Leer datos de un fichero </title> </head> </body>
<?php
if (isset($_FILES['archivo'])){
$datos = $_FILES['archivo']['tmp_name'];
$contenido = file ( $datos );
$lineaComienzoDatos = 16;
$lineasLeidas = 0;
for( $i = $lineaComienzoDatos; $i < sizeof( $contenido ); $i = $i +2) {
$linea = trim( $contenido[ $i ] );
$lineasLeidas ++;
$arrayDatos = explode(" ", $linea);
print_r( $arrayDatos );
echo "<br><br>";
}
unlink( $datos );
} else {
?>
<form method="post" name="formulario" enctype="multipart/form-data">
<input name="archivo" type="file">
<input type='submit' name='enviar'>
</form>
<?php
}
?>
</body> </html>
Lo de antes, donde pone
print_r( $arrayDatos );
Es donde tu tienes que tratar los datos de ese empleado que están en $arrayDatos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas