Foros del Web » Programando para Internet » PHP »

crear archivo plano con cierta estructura

Estas en el tema de crear archivo plano con cierta estructura en el foro de PHP en Foros del Web. Cordial saludo. He buscado en el foro y no he encontrado una solucion a mi inconveniente y es el siguiente debo crear un archivo plano ...
  #1 (permalink)  
Antiguo 18/03/2012, 22:13
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 8 meses
Puntos: 2
Pregunta crear archivo plano con cierta estructura

Cordial saludo.

He buscado en el foro y no he encontrado una solucion a mi inconveniente y es el siguiente debo crear un archivo plano con las siguientes caracteristicas:

121452 ACETAMINOFEN CAP 3 123
414124 ASPIRINA AMERICAN 12 2400
15043 BROMATINA CAPSUL 122 21000

como pueden ver los 6 primeros numeros es un codigo de 6 digitos y deben estar alineados a la derecha, despues sigue un espacio, despues el nombre del producto de 16 caracteres, despues siguen dos espacios y viene la cantidad de 3 digitos alineados a la derecha, despues dos espacios y despues viene el valor alineado a la derecha; no he podido lograr crear el archivo plano con estas caracteristicas. El total de la linea es 38 caracteres lo cual lo hago con str_pad.

Voy a pegar el codigo que he hecho hasta ahora...

Cita:
<?php
header("Pragma: no-cache");
header("Cache-control: private");
ob_start();

$item = 713358;
$cantidad = '3';
$cantidad = str_pad($cantidad, 3, " ", STR_PAD_RIGHT);

$NombMedica = trim('LORATADINA 10 MG PLUA');
$NombMedica = substr($NombMedica,0,16);

$ValorMedica = round(1500,0);
$Linea = $Linea.$item." $NombMedica ".str_pad($cantidad, 3, "0", STR_PAD_RIGHT)." $ValorMedica\r\n";
$Linea = str_pad($Linea, 38, " ", STR_PAD_BOTH);
$ValorTotal = $ValorTotal + $ValorMedica;

$NombMedica = trim('BROMOCRIPTINA 2 MG IP');
$NombMedica = substr($NombMedica,0,16);

$item = 713360;
$cantidad = '15';
$cantidad = str_pad($cantidad, 3, " ", STR_PAD_RIGHT);
$ValorMedica = round(15000,0);

$Linea = $Linea.$item." $NombMedica ".str_pad($cantidad, 3, "0", STR_PAD_RIGHT)." $ValorMedica\r\n";
$Linea = str_pad($Linea, 38, " ", STR_PAD_BOTH);
$ValorTotal = $ValorTotal + $ValorMedica;

$Total = "****** TOTAL $".round($ValorTotal,0)." ******";
$Total = str_pad($Total, 38, " ", STR_PAD_BOTH);

$TextoFactura = $Linea."\r\n".
$Total."\r\n";

echo $TextoFactura;

$size = ob_get_length();
header('Content-Length: '.($size));
header("Content-Disposition: inline; filename=factura.fac");
header("Content-type: application/unafactura");
ob_end_flush();
?>
Agradezco la ayuda y sugerencias que me puedan brindar.
  #2 (permalink)  
Antiguo 19/03/2012, 02:20
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: crear archivo plano con cierta estructura

@tattojk
Explicate mejor porque no se entiende

Cita:
El total de la linea es 38 caracteres
tu primer linea tiene 29
la primera parte de cada linea deben ser 6 digitos, tu tercera linea tiene solo 5
El nombre del producto tiene 16 caracteres, si son mas, acortas la cadena, ok, pero y si son menos? o ya sabés que todos tus productos tienen por nombre 16 ó más caracteres?
Despues esta eso de la cantidad, que son tres cifras, pero la primera y segunda linea tienen 1 y 2 respectivamente. Y para finalizar el ultimo valor, que va a la izquierda, que no se sabe de cuantas cifras es (3, 4, ó 5)
lo unico que se me ocurre formatear las lineas para que todas tengan la misma estructura, pero para eso hay que saber cual es el máximo de digitos para el ultimo valor, a ver:
Ejemplo:
123456 AAAAAAAAAAAAAAAA 123 12345 --> contando espacios son 33, dónde ponés los 5 que te faltan? a derecha, a izquierda, con que objeto, el archivo generado va a ser procesado por otra aplicación?
De tu php no saco mucho en claro, porque tenés
$Linea = $Linea.$item." $NombMedica ".str_pad($cantidad, 3, "0", STR_PAD_RIGHT)." $ValorMedica\r\n";
en dónde $Linea=$Linea sin estár $Linea definido en niguna parte.
Un poco confuso a mi juicio

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 19/03/2012, 17:05
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 8 meses
Puntos: 2
Pregunta Respuesta: crear archivo plano con cierta estructura

Cordial saludo emprear.

tienes razon el total de caracteres debe ser 33.

En php no es necesario definir variables si hay una variable que no esta definida el lo toma como vacio o 0 dependiendo si es texto o numero, por eso no defini $linea en ningún lado.

se que la primera linea tiene 29 por eso necesito hacer el formato que comente anteriormente:

* los 6 primeros numeros es un codigo de 6 digitos y deben estar alineados a la derecha si no tienen 6 digitos se debe llenar con espacios a la izquierda hasta completar los 6 digitos.

* despues sigue un espacio.

* despues el nombre del producto de 16 caracteres si no tiene los 16 caracteres se debe llenar con espacios a la derecha hasta completar los 16 caracteres.

* despues siguen dos espacios

* despues la cantidad de 3 digitos alineados a la derecha si no tiene los 3 digitos se debe llenar con espacios a la izquierda hasta completar los 3 digitos

* despues dos espacios

* despues viene el valor alineado a la derecha con 5 digitos a la derecha si no tiene los 5 digitos se debe llenar con espacios a la izquierda hasta completar los 5 digitos

el total son 33 digitos como me corregiste....

Espero que ahora este mas claro mi problema....

Agradezco de antemano la ayuda y sugerencias que me puedan brindar.
  #4 (permalink)  
Antiguo 19/03/2012, 18:33
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: crear archivo plano con cierta estructura

Bueno, siguen sin darme los números
porque
6 +
1 (espacio) +
16 +
2 (espacios)+
3 +
2 (espacios)+
5

= 35 y no 33, daría 33 si siempre separases por un espacio
Igual te hice esto

Código PHP:
Ver original
  1. <?php
  2. // linea en que coincide todo menos el nombre
  3.  
  4. $id="999999";
  5. $nombre="AAAA AAAA AA AAAA AAAA AAAAA AAAA";
  6. $num_uno="999";
  7. $num_dos="99999";
  8. // usamos tabulaciones como separadores
  9. $linea = file_put_contents("lista.txt","$id\t". substr($nombre,0,16). "\t\t$num_uno\t\t$num_dos\n", FILE_APPEND | LOCK_EX);
  10.  
  11. // con las longitudes inexactas
  12.  
  13. $id="444";
  14. $id = str_pad($id, 6,' ',STR_PAD_LEFT);  
  15. $nombre="XX XXXX ZZ DDOOOW"; // W es el caracter 17, se recorta
  16. $nombre = substr($nombre,0,16);
  17. $nombre = str_pad($nombre, 16,' ',STR_PAD_RIGHT);
  18. $num_uno="23";
  19. $num_uno = str_pad($num_uno, 3,' ',STR_PAD_LEFT);
  20. $num_dos="5555";
  21. $num_dos = str_pad($num_dos, 5,' ',STR_PAD_LEFT);
  22. // usamos espacios en blanco como separadores
  23. $linea = file_put_contents("lista.txt","$id $nombre  $num_uno  $num_dos\n", FILE_APPEND | LOCK_EX);
  24.  
  25. if(file_exists('lista.txt')){
  26. echo "<pre>";
  27. include('lista.txt');
  28. echo "</pre>";
  29. }
  30.  
  31. ?>

usar tabulaciones como separadores puede ser util para procesar el archivo de texto posteriormente ya que el nombre puede contener espacios en blanco

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 19/03/2012, 21:05
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 8 meses
Puntos: 2
Pregunta Respuesta: crear archivo plano con cierta estructura

Cordial saludo emprear.

te agradezco el tiempo para ayudarme, me sirve de perlas el codigo que muestras ya lo adapte a la necesidad y me quedo perfecto.

tendre en cuenta la sugerencia con lo de los tabuladores, pero me sale una duda se que para formatearlo es con \t pero como hago cuando lea el archivo y este esos tabuladores???

generalmente lo hago con explode y busco el espacio pero para buscar el tabulador ni idea

agradezco de antemano la ayuda y sugerencias que me puedas brindar.
  #6 (permalink)  
Antiguo 19/03/2012, 23:36
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: crear archivo plano con cierta estructura

lo buscas de la misma forma en que lo pusiste, con \t, como si pusieras " ", ó "|", etc

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: estructura, plano
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:35.