Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - bjeli1980

#1
Ahora creo que sí.

Lo he dejado así:

Código (perl) [Seleccionar]
my ($a, $kk, $num, $b) = $s =~ m/(([^;]*;){6})([0-9]*)(.*)$/;
$num--;
$s = $a . $num . $b ."\n";
#2
Tienes razón, no está bien, voy a echarle un vistazo.
#3
Scripting / Re: Modificar archivos de texto
12 Mayo 2010, 12:29 PM
Al final lo he hecho en Perl, os pongo el código:

Muchas gracias a todos:

Código (perl) [Seleccionar]

opendir(DIRHANDLE,".")||die "ERROR: no se puede leer directorio actual\n";
foreach (readdir(DIRHANDLE)){
next if ($_ eq "." || $_ eq "..");  
next if (-d "$_" && ! -l "$_");  
print $_ . "\n";
open (ENTRADA,"<$_") || die "ERROR: No puedo abrir el fichero $_\n";
#Los copio dentro la carpeta
open (SALIDA,">modificados/$_") || die "ERROR: No puedo abrir el fichero $d/$_\n";


while ($s=<ENTRADA>)
 {
my ($a, $_, $num, $b) = $s =~ m/(([^;]*;){6})([0-9]*)(.*)$/;

if (($s =~ /puerta/ ) || ($s =~ /frente/ ))
{
print "Encontrado";
$num--;
$s = $a . $_ . $num . $b;
}
print SALIDA $s;
 }
 close (ENTRADA);
 close (SALIDA);
}
closedir DIRHANDLE;
#4
Scripting / Re: Modificar archivos de texto
12 Mayo 2010, 09:41 AM
Gracias a todos por responder.

- biribau, había pensado en hacerlo en perl ya que en batch me resultaba más dificil, tengo q probar la solución q me das, pero primero tendría que buscar primero si la línea contiene la palabra "puerta" o "frente"

- Leo, si que podemos utilizar aplicaciones externas. La palabra puerta o frente podría aparecer en más de una línea, por lo que habría que cambiarlo en varias líneas.

Voy a probar lo que me habeis puesto.

;) ;) ;) ;)

Ya lo he probado pero no me funciona para un fichero concreto. Me falla dentro de este for: for /f "tokens=*" %%_ in (file.txt) do (

Leo tengo que cambiarlo en 16000 ficheros, por lo que tengo q hacerlo de manera que no tenga que editarlos. Puede que la palabra puerta o frente no esté en ninguna línea del fichero, también puede ser que esté en diferentes lineas.

#5
Hola,

Me ha surgido un problema que tengo que solucionar y no he dudado en recurrir a este foro, ya que otras veces me habeis echado una mano.

Tengo 16000 archivos de texto en una carpeta en los que les tengo que modificar un solo dato en cada archivo. Los archivos son de esta forma:

LST;1;
costados\koa9\koa9gx70;ko-//-a9-gx7-0 ; ;1;1;0;2278.;325.;18.;0;0;0;0;0;0;0;0;;;;
costados\koa9\koa9gx70;ko-//-a9-gx7-0 ;M;1;1;0;2278.;325.;18.;0;0;0;0;0;0;0;0;;;;
wa;baldas fondo 2, 3, 5 y 6;;0;0;1;1162.;280.;18.;0;0;;;;;;;;;;
plb;puerta común batiente ;;0;0;1;2275.;297.;20.;0;1;2;192;0;0;0;0;0;0;;

En aquellas líneas que aparece la palabra "puerta" o "frente" necesito restarle 1 al valor que está entre el sexto y septimo punto y coma, en este caso 2275.

Por lo que esa línea quedaría así y el resto del archivo estaría igual:
plb;puerta común batiente ;;0;0;1;2274.;297.;20.;0;1;2;192;0;0;0;0;0;0;;

Gracias antes de nada.
#6
Muchas gracias!!!

Me queda mucho por aprender. :-(

#7
Muchas gracias xassiz, me ha funcionando perfectamente.

¿para que sirve "!line:~-3!"==".ad"?

¿xq pones !line!>>!fichero! entre admiraciones?

#8
Hola,

A ver si alguien me puede echar una mano que estoy bastante atascado.

Quiero generar varios txt a partir de un txt. El fichero origen es asi:

La primera línea es el nombre del fichero, y tiene que generar un fichero hasta que encuentra la línea FIN MATERIAL.


1-1958.ad
Melamina Blanca1801958BK1X11-BK                     22/03/2010
1901958BK1X2001120004000000060Costado Armario 1100006
1901958BK1X2000752004485000010Puerta Armario 80500001
1901958BK1X2001482004485000100Puerta Armario A1 00010
1901958BK1X2000391505240000950Tapa-Fondo A1 basi00095
1801958BK1X4003660020500999990Melamina Blanca 3699999
FIN MATERIAL
1-1959.ad
Melamima Blanca1001959BK1X11-BK                     22/03/2010
1001959BK1X2000865003790000010Division Horizonta00001
1001959BK1X2001455008750000200Trasera 1535 A1 ba00020
1001959BK1X2001810008750000250Trasera 1900 A1 BA00025
1001959BK1X2000715008750000200Trasera 805 A1 BAS00020
1001959BK1X4003660020500999990Melamima Blanca 3699999
FIN MATERIAL
1-24507.ad
Blanco Super So25024507BK111-BK                     22/03/2010
25024507BK12000864003590000040Balda A1 basica00004
25024507BK14002550021000999990Blanco Super Soft 99999
FIN MATERIAL


Yo he hecho este script pero me da un error de "No se esperaba ( en este momento.".

::CrearFichero por Materiales partiendo de "listacorteoptimizador.txt"

@echo off
:Main
set sFin=FIN MATERIAL
set fListadoCorte=listacorteoptimizador.txt

setlocal enabledelayedexpansion
set bNombreFichero = 0

For /f "useback tokens=*" %%F in ("%fListadoCorte%") do (
   
   If "%%F" == "%sFin%" (
    set bNombreFichero = 0
   ) Else (
   If %bNombreFichero% == 0 (
         set fMaterial = %%F
         set bNombreFichero = 1
      ) Else (
      echo %%F >> %fMaterial%
   )
)

A ver si alguien me puede echar una mano. Gracias

;)