elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [AYUDA]Con Modificacion de Archivo de Texto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA]Con Modificacion de Archivo de Texto  (Leído 5,629 veces)
FranciskoAsdf

Desconectado Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
[AYUDA]Con Modificacion de Archivo de Texto
« en: 28 Mayo 2010, 09:08 am »

Hola Saludos a todos! :

Que fome estar molestando de nuevo, pero es que no me resulta un código y no sé porque :S, les voy a explicar un poco para ver si alguien me puede ayudar T_T:

A ver tengo un archivo llamado plu.txt que contiene datos como los siguientes :

Código:
000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TOTTAL
(solo pegué unos pocos ya que son cientos de lineas :S)

Cada linea del archivo de "identifica" por el código PLU que está antes de la primera "coma" (,).
Lo que yo necesito es modificar el valor "5" que está antes de la octava coma de un PLU (codigo) especifico.

Por ejemplo debo modificar el valor 5 del codigo 000148:

Tengo el txt así:
Código:
000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TOTTAL

Y me tiene que quedar así

Código:
000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  25,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TOTTAL

Después de intentar varias cosas he llegado hasta el siguiente código, pero no me funciona como yo quiero porque me modifica todas las lineas y yo solo necesito hacerlo en las que yo le diga al code :S, he aquí el código:

Código
  1. @Echo Off
  2. SetLocal EnableDelayedExpansion
  3. Set /P "Plu=Ingrese Plu :"
  4.  
  5. For /F "Tokens=1,9 Delims=,[] Skip=2" %%f In ('Find "%plu%" plu.txt /n') Do (
  6. Set "Linea=%%f"
  7. Set "dato=%%g"
  8. )
  9.  
  10. For /F "Tokens=* Delims=" %%x In ('Type plu.txt') Do (
  11. Set Linea=%%x
  12. Set Linea=!Linea:% style="color: #448888;">dato%=  25!
  13. Call :Show !Linea!
  14. )
  15.  
  16. :Show
  17. Echo %* >> SalidaPLU.txt
  18.  
  19. Goto :Eof
  20.  

Pero no sé porque no me funciona D:

Espero que alguien me pueda ayudar, ya que son varias las lineas que debo modificar, y no siempre van a ser las mismas :S.


De ante mano muchas gracias

Se despide y saluda atte
Francisco.

PD: El formato del archivo siempre es el mismo, comas espacios y eso xD.
PD2: Ya me leí el tema "acciones sobre archivos de texto" de leo, de hecho gracias a ese tema he conseguido mi code xD


« Última modificación: 28 Mayo 2010, 09:11 am por Panxin.boo » En línea

Asdf debería ser algún tipo de función.
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [AYUDA]Con Modificacion de Archivo de Texto
« Respuesta #1 en: 28 Mayo 2010, 23:39 pm »

Lo que no especificaste es si el código 000148 se repite a lo largo del archivo, o si solo aparece una sola vez.

En fin, veré qué puedo hacer.

¿Para qué quieres hacer esto?


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
FranciskoAsdf

Desconectado Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
Re: [AYUDA]Con Modificacion de Archivo de Texto
« Respuesta #2 en: 28 Mayo 2010, 23:47 pm »

Hola Leo saludos :)

Ninguno de los codigos se repiten en el archivo, son unicos.

Y lo necesito para mi trabajo, ya que me lleva mas de media hora hacer este proceso :(, y el problema es que esto lo hago al salir de mi trabajo ( por una cuestion que no viene al caso) y asi me podria ahorrar varios minutos .

PD: Son varios los codigos que debo cambiar, el que puse es solo un ejemplo .


Espero me puedas ayudar :)!


Saludos
« Última modificación: 28 Mayo 2010, 23:53 pm por Panxin.boo » En línea

Asdf debería ser algún tipo de función.
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [AYUDA]Con Modificacion de Archivo de Texto
« Respuesta #3 en: 29 Mayo 2010, 00:21 am »

Bueno, hice esto:

Teniendo el archivo con el siguiente contenido:
Código:
C:\>type FILE.TXT
000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER
TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER
TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  2,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TO
TTAL
000148,       000148, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER
 TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TO
TTAL

C:\>

El siguiente script modifica la linea con la ocurrencia indicada por la cadena indicada, modo de uso:

Código:
code.bat código sustitución

Ejemplos:
Código:

C:\>type file.txt
000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER
TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER
TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TO
TTAL
000148,       000148, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPER
 TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TO
TTAL

C:\>code 000148 34
000145,       000145, 0,   2499, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER
TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER
TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TO
TTAL
000148,       000148, 0,   2499, 0,000000,0,  34,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPE
R TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TO
TTAL

C:\>code 000145 -4
000145,       000145, 0,   2499, 0,000000,0,  -4,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER
 TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER
TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  5,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER TO
TTAL
000148,       000148, 0,   2499, 0,000000,0,  34,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPE
R TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TO
TTAL

C:\>code 000147 345
000145,       000145, 0,   2499, 0,000000,0,  -4,  0,       0,1,0,0,KUCHEN MANZANA FAMILIAR,SUPER
 TOTTAL
000146,       000146, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN MIGA (STROISSER),SUPER
TOTTAL
000147,       000147, 0,   2990, 0,000000,0,  345,  0,       0,1,0,0,PIE DE LIMON FAMILIAR,SUPER
TOTTAL
000148,       000148, 0,   2499, 0,000000,0,  34,  0,       0,1,0,0,KUCHEN DURAZNO SUPER TOT,SUPE
R TOTTAL
000149,       000149, 0,   1299, 0,000000,0,  5,  0,       0,1,0,0,KUCHEN ALEMAN,SUPER TOTTAL
000150,       000150, 0,      0, 0,000000,0,  5,  0,       0,1,0,0,QUEQUE INGLES MEDIANO,SUPER TO
TTAL

Código
  1. @ECHO OFF
  2. IF ["%1"]==[""] (GOTO:ERROR)
  3. SETLOCAL ENABLEDELAYEDEXPANSION
  4. REM EL NÚMERO DE LÍNEA A MODIFICAR:
  5. FOR /F "TOKENS=1, 2 DELIMS=:" %%A IN ('TYPE "FILE.TXT" ^| FINDSTR /I /N /R "^%1"') DO (
  6. SET "LINEA=%%A"
  7. SET "CONTENIDO=%%B"
  8. )
  9. FOR /F "TOKENS=1-6*" %%A IN ("%CONTENIDO%") DO (
  10. (
  11. ECHO %LINEA%
  12. ECHO %%A      %%B %%C   %%D %%E  %2,  %%G
  13. ECHO W
  14. ECHO E
  15. ) | EDLIN /B FILE.TXT > NUL 2>&1
  16. )
  17. TYPE "FILE.TXT"
  18. GOTO:EOF
  19. :ERROR
  20. ECHO ERROR CON ARGUMENTOS.
  21. EXIT /B 1
  22. GOTO:EOF

Saludos.
« Última modificación: 29 Mayo 2010, 00:25 am por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
FranciskoAsdf

Desconectado Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
Re: [AYUDA]Con Modificacion de Archivo de Texto
« Respuesta #4 en: 29 Mayo 2010, 00:37 am »

Hola Leo de nuevo T_T ( y muchas gracias por tu tiempo) :

Al parecer hay algún problema con el peso del archivo, te preguntarás por que el peso, pues lo que pasa es que probando y probando, me he dado cuenta que hay un tope de lineas (o de peso de datos) que edlin puede leer, porque me he fijado hasta que código editaba la linea y he dividido el archivo original en dos partes.

Por ejemplo con el archivo completo (sin dividir) solo edita hasta el código 051822 (que es la linea 388), y el no editaba el código que seguía el 051823, bueno pues seleccioné todo lo que seguía hasta el código 51823 (dejando este el principio del archivo, como primer código) y lo pegué en otro archivo, corrí el script sobre el archivo y funcionó, después que no editaba el código 051823 ahora si editaba el código 051823, aunque este código estaba al principio del nuevo archivo, seguí probando hasta que código editaba, y después de casi el mismo numero de lineas ya no editaba más, volví a dividir el archivo (ya vamos en 3 partes xD) y pasó lo mismo.-

Me fijé en el peso de los archivos y es de 37kb y fracción.-
Así pues es por eso que pienso que tiene que ver algo con eso del peso o con la cantidad de datos que puede manejar EDLIN.-


Entonces estoy como PLOP!, no sé que se podrá hacer en estos casos :S.

Muchos saludos y gracias de nuevo, pero es que no sé como lo puedo solucionar :S.-


Saludos :)!

Te dejo el link con el archivo completo.-

Link de txt

El problema es que este archivo se genera diariamente, si no, seria super fácil modificarlo y cargar el mismo archivo siempre, pero no se puede ya que los valores van cambiando segun se necesite :/


Disculpa las molestias, espero me puedas segui ayudando :)
« Última modificación: 29 Mayo 2010, 18:26 pm por Panxin.boo » En línea

Asdf debería ser algún tipo de función.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA] Obtener la fecha de modificacion de un archivo
Programación C/C++
maxgeniusgm 1 7,119 Último mensaje 31 Octubre 2012, 00:59 am
por BatchianoISpyxolo
Problema modificación archivo binario java
Programación General
solid120 0 3,568 Último mensaje 3 Junio 2013, 11:28 am
por solid120
Modificacion de archivos de texto (ini)
Scripting
krizalidk 3 2,762 Último mensaje 11 Noviembre 2013, 02:32 am
por Eleкtro
Modificacion de texto en batch
Scripting
santi810 2 2,380 Último mensaje 11 Noviembre 2013, 13:39 pm
por santi810
modificacion de archivo y verificacion de existencia no cierra??? ayuda!!!
Programación C/C++
kerkox 3 2,396 Último mensaje 5 Marzo 2014, 13:35 pm
por amchacon
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines