• Publicidad

Buscador de archivos para traducir

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Buscador de archivos para traducir

Notapor charmin » 2010-02-09 14:47 @658

Hola, ¿cómo están?

Primero que nada muchas gracias por la ayuda con el traductor, me quedó excelente.

Pero ahora tengo una duda, ¿cómo puedo hacer para, primero, hacer un buscador de archivos, con el cual pueda aplicar el programa del traductor, realice la operación que hace este script a cada archivo?

Pongo el programa del traductor como lo dejé al final. Agradecería su ayuda porque ahora sí estoy más que perdido. Tengo idea de cómo hacerlo pero pues no se me ocurre nada de momento.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Introduzca el nombre del archivo\n";
  2.  
  3. $archivo = <STDIN>;                                     # se introduce el nombre del archivo a sustituir
  4.  
  5. print "Introduzca el nombre del Diccionario\n";
  6.  
  7. $dic  = <STDIN>;                                        # diccionario normal->latex
  8.  
  9. open(ARCHIVO,"<$archivo");                              # se abre el archivo a traducir
  10.  
  11. while (<ARCHIVO>) {
  12.     $count++ ;                                          # contador de las líneas del archivo
  13.  
  14.     push @archivo, $_;                                  # se guarda en el array del archivo
  15. }
  16.  
  17. close(ARCHVIVO);
  18.  
  19. print "\nEl archivo tiene $count líneas\n";
  20.  
  21. open(DIC,"$dic");                                       # se abre diccionario
  22.  
  23. while (<DIC>) {                                         # ciclo para separar las variables del diccionario
  24.     chomp;
  25.  
  26.     ($b,$s) = split q[,];
  27.     $dicc{$b} = $s;                                     # lo guardamos en un hash
  28. }
  29.  
  30. close (DIC);
  31.  
  32. $n_linea = 1;                                           # número de línea
  33.  
  34. for $linea (@archivo) {
  35.     $cambios = 0;
  36.  
  37.     for $b (keys %dicc) {                                # para todas las claves del diccionario
  38.         $cambios += $linea =~ s/$b/$dicc{$b}/g;         # hacemos la traducción y llevamos la cuenta
  39.     }
  40.  
  41.     open(SALIDA,">>salida.dat");
  42.     print SALIDA "Línea $n_linea con $cambios cambios\n";
  43.     $n_linea++;
  44.     close(SALIDA);
  45. }
  46.  
  47. print "\n@archivo\n";                                   # imprime el archivo traducido
  48.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
charmin
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-02-03 14:31 @646

Publicidad

Re: Buscador de archivos para traducir

Notapor explorer » 2010-02-09 15:33 @690

¿Y en qué consistiría el buscador? ¿Qué es lo que quieres buscar? ¿Dónde?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Buscador de archivos para traducir

Notapor charmin » 2010-02-09 15:50 @701

explorer escribiste:¿Y en qué consistiría el buscador? ¿Qué es lo que quieres buscar? ¿Dónde?

Bueno, lo que quiero hacer es que el script se pueda aplicar a una lista de directorios u archivos, los cuales son los archivos a traducir, con el programa que cito aquí mismo. Creo que me confundí al poner buscador dado que leyendo un poco lo que deseo hacer es:

1.- darle una lista de archivos u directorios de una máquina al script.
2.- que a cada uno de estos archivos les aplique la traducción con el programa que ya realicé.
3.- y me muestre la salida que hago en el programa que tengo citado, de cada uno de los archivos.

Pensaba en algo así como hacer el programa citado un módulo, el cual pueda implementar en el nuevo archivo, pero apenas estoy viendo eso. O no sé si existiera una forma más simple de hacerlo.
De antemano muchas gracias por la atención.
charmin
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-02-03 14:31 @646

Re: Buscador de archivos para traducir

Notapor explorer » 2010-02-09 16:48 @741

Te vale con meter el traductor en una subrutina.

Es más, la parte de lectura del diccionario solo tienes que hacerla una vez, así que la puedes hacer en la parte principal del programa. El resto, en la subrutina.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Buscador de archivos para traducir

Notapor charmin » 2010-02-09 18:20 @805

Mira, esto es lo que se me ocurrió a mi:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Introdusca el nombre del directorio\n";          #se introduce el listado de archivos a abrir.
  2.  
  3. $direccion = <STDIN>;                                    
  4.  
  5. open (DIRECTORIO,"<$direccion");                        #se abre el archivo con el listado de los archivos a traducir
  6.  
  7. while (<DIRECTORIO>){                                   #ciclo para separar el nombre de los archivos
  8.  
  9. chomp;
  10.  
  11. @e=split q[,];
  12.  
  13. }
  14.  
  15. close (DIRECTORIO);
  16.  
  17. print @e;
  18.  
  19. $archivo=$e[0]; #<-- aqui es donde tengo la duda.
  20.  
  21. $dic  = "diccionario.dat";                                        # diccionario normal->latex
  22.  
  23. open(ARCHIVO,"<$archivo");                              # se abre el archivo a traducir
  24.  
  25. while (<ARCHIVO>) {
  26.  
  27.     $count++ ;                                          # contador de las líneas del archivo
  28.  
  29.     push @archivo, $_;                                  # se guarda en el array del archivo
  30.  
  31. }
  32.  
  33. close(ARCHVIVO);
  34.  
  35. print "\nEl archivo tiene $count líneas\n";
  36.  
  37. open(DIC,"$dic");                                       # se abre diccionario
  38.  
  39. while (<DIC>) {                                         # ciclo para separar las variables del diccionario
  40.  
  41.     chomp;
  42.  
  43.     ($b,$s) = split q[,];
  44.  
  45.     $dicc{$b} = $s;                                     # lo guardamos en un hash
  46.  
  47. }
  48.  
  49. close (DIC);
  50.  
  51. $n_linea = 1;                                           # número de línea
  52.  
  53. for $linea (@archivo) {
  54.  
  55.     $cambios = 0;
  56.  
  57.     for $b (keys %dicc) {                                # para todas las claves del diccionario
  58.  
  59.         $cambios += $linea =~ s/$b/$dicc{$b}/g;         # hacemos la traducción y llevamos la cuenta
  60.  
  61.     }
  62.     open(SALIDA,">>salida.dat");                        #manda al archivo salida.dat los cambios realizados en cada linea
  63.  
  64.     print SALIDA "Línea $n_linea con $cambios cambios\n";
  65.  
  66.     $n_linea++;
  67.  
  68.     close(SALIDA);
  69.  
  70. }
  71. print "\n@archivo\n";                                   # imprime el archivo traducido
  72.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

pero ahora queda la duda: en la linea $e se supone que ahí guardo lo que es el nombre de los archivos que deseo traducir. Este programa lo que hace es tomar el primero pero no sé cómo hacerle que lo haga con los demás archivos de texto que existen.
charmin
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-02-03 14:31 @646

Re: Buscador de archivos para traducir

Notapor explorer » 2010-02-09 18:24 @808

Lo dicho antes:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $archivo (@e) {
    traduce($archivo);
}
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Buscador de archivos para traducir

Notapor charmin » 2010-02-09 19:00 @833

Por ejemplo hago que mi subrutina se llame traduce(), ¿y por el for() sea aplicado a traduce() en el número de archivo que son?
charmin
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-02-03 14:31 @646

Re: Buscador de archivos para traducir

Notapor charmin » 2010-02-09 19:55 @871

Bueno, para ayudar un poco con mi duda que ahora me queda creo que debo hacer lo siguiente para que no exista duda.
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
este es el archivo directorio:
texto.dat,texto2.dat,texto3.dat
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Este es el diccionario:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
raiz,sqrt
div,frac
expo,^
izquierda,left
derecha,right
suma,sum_
infinito,infty
matematico,mathrm
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Y este es el código con las modificaciones que me recomendaste:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#print "Introduzca el nombre del directorio\n";         #se introduce el listado de archivos a abrir.

$direccion ="directorio.dat";                                    

open (DIRECTORIO,"<$direccion");                        #se abre el archivo con el listado de los archivos a traducir

while (<DIRECTORIO>){                                   #ciclo para separar el nombre de los archivos

chomp;

@e=split q[,];

}

close (DIRECTORIO);

$dic  = "diccionario.dat";                              # diccionario normal->latex

open(DIC,"$dic");                                       # se abre diccionario

while (<DIC>) {                                         # ciclo para separar las variables del diccionario

    chomp;

    ($b,$s) = split q[,];

    $dicc{$b} = $s;                                     # lo guardamos en un hash

}

close (DIC);

for $archivo (@e) {                                     #llamo al programa tantas veces como archivos tenga
 
   &traduce($archivo);

}

sub traduce{                                            # se inicia la subrutina

open(ARCHIVO,"<$archivo");                              # se abre el archivo a traducir

while (<ARCHIVO>) {

    $count++ ;                                          # contador de las líneas del archivo

    push @archivo, $_;                                  # se guarda en el array del archivo

}

close(ARCHVIVO);

print "\nEl archivo tiene $count líneas\n";


$n_linea = 1;                                           # número de línea

for $linea (@archivo) {

    $cambios = 0;

    for $b (keys %dicc) {                                # para todas las claves del diccionario

        $cambios += $linea =~ s/$b/$dicc{$b}/g;         # hacemos la traducción y llevamos la cuenta

    }
    open(SALIDA,">>salida.dat");

    print SALIDA "Línea $n_linea con $cambios cambios\n";

    $n_linea++;

    close(SALIDA);

}

print "\n@archivo\n";                                   # imprime el archivo traducido

}                                                       #se termina la subrutina

 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Ahora en los archivos texto, ahora si este sería más o menos un ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
\[ \ div{xexpo2}{xexpo2 + yexpo2} + \ div12 +

\div1{1 + \ raiz{ \div{21}3 } \]

 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Indistinto en cualquier archivo de los nombrados textos.

Bueno he aquí mi pregunta ahora sí muy concreta, ya lo corre el programa y hace para el primer archivo la traducción como se supone que la debe hacer, pero al momento de abrir el segundo archivo y correrlo para traducirlo, guarda los cambios del primero y le suma lo que este en el archivo2, es decir si en el primer archivo tenía 2 líneas, al volver a correr el programa me pone esas dos líneas más las que ya tiene este archivo, y pues ya no hace las traducciones pertinentes, no sé que tenga de mal en mi sintaxis, y de antemano muchas gracias por la ayuda. No saben cuánto les agradezco el tiempo que se toman para ayudarme.
charmin
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-02-03 14:31 @646

Re: Buscador de archivos para traducir

Notapor charmin » 2010-02-09 20:17 @886

Pongo las salidas que me da:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
El archivo tiene 2 líneas
\[ \ frac{x^2}{x^2 + y^2} + \ frac12 +
 \frac1{1 + \ sqrt{ \frac{21}3 } \]
El archivo tiene 3 líneas
\[ \ frac{x^2}{x^2 + y^2} + \ frac12 +
 \frac1{1 + \ sqrt{ \frac{21}3 } \]
 \[ \ frac{x^2}{x^2 + y^2} + \ frac12 ]
El archivo tiene 3 líneas
\[ \ frac{x^2}{x^2 + y^2} + \ frac12 +
 \frac1{1 + \ sqrt{ \frac{21}3 } \]
 \[ \ frac{x^2}{x^2 + y^2} + \ frac12 ]
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Jugando un poco me di cuenta de varias cosas:
1.- como se ve en la primera salida del programa. me hace la primera traducción de ese archivo que es lo deseado.
2.- pero no me cierra el programa en vez de eso lo incluye en el segundo archivo, lo bueno que éste sí realiza la traducción en lo que contenga el segundo archivo, pero pues no me da lo deseado, dado que anexa la información no deseada.

Seguiré buscando la manera de quitar el programa pero su ayuda será bien recibida.
charmin
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-02-03 14:31 @646

Re: Buscador de archivos para traducir

Notapor charmin » 2010-02-10 04:00 @208

Al fin este es el archivo que deseo que haga casi lo que quiero:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #print "Introdusca el nombre del directorio\n";         #se introduce el listado de archivos a abrir.
  2.  
  3. $direccion ="directorio.dat";                                    
  4.  
  5. open (DIRECTORIO,"<$direccion");                        #se abre el archivo con el listado de los archivos a traducir
  6.  
  7. while (<DIRECTORIO>){                                   #ciclo para separar el nombre de los archivos
  8.  
  9.         chomp;
  10.  
  11.         @e=split q[,];
  12. }
  13.  
  14. close (DIRECTORIO);
  15.  
  16. $dic  = "diccionario.dat";                              # diccionario normal->latex
  17.  
  18. open(DIC,"$dic");                                       # se abre diccionario
  19.  
  20. while (<DIC>) {                                         # ciclo para separar las variables del diccionario
  21.        
  22.         chomp;
  23.  
  24.         ($b,$s) = split q[,];
  25.  
  26.         $dicc{$b} = $s;                                     # lo guardamos en un hash
  27. }
  28.  
  29. close (DIC);
  30.  
  31. for $archivo (@e) {                                     #llamo al programa tantas veces como archivos tenga
  32.  
  33.         &traduce($archivo);
  34.         print @archivo;
  35. }
  36.  
  37. sub traduce{                                            # se inicia la subrutina
  38.  
  39. open(ARCHIVO,"<$archivo");                              # se abre el archivo a traducir
  40.  
  41. while (<ARCHIVO>) {
  42.  
  43.         $count++ ;                                          # contador de las líneas del archivo
  44.         push @archivo, $_;                                  # se guarda en el array del archivo
  45. }
  46.  
  47. $count2++;                                              #contador del numero de archivo
  48.  
  49. close(ARCHIVO);
  50.  
  51. print "\nEl archivo $count2 tiene $count líneas\n";
  52.  
  53.  
  54. $n_linea = 1;                                           # número de línea
  55.  
  56. for $linea (@archivo) {
  57.  
  58.         $cambios = 0;
  59.  
  60.         for $b (keys %dicc) {                                # para todas las claves del diccionario
  61.  
  62.         $cambios += $linea =~ s/$b/$dicc{$b}/g;          # hacemos la traducción y llevamos la cuenta
  63.  
  64.         }
  65.        
  66.         open(SALIDA,">>salida.dat");
  67.  
  68.         print SALIDA "\n Archivo: $archivo\n \nLinea $n_linea se realizaron $cambios cambios.\n";
  69.        
  70.         chomp;
  71.         $n_linea++;
  72.  
  73.         close(SALIDA);
  74.         }
  75.                                                         #se termina la subrutina
  76. }
  77.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Ya solo me queda un problema por resolver, y es el hecho de que me guarda la traducción de un archivo anterior en el de otro archivo, lo que puse en el post anterior. Supongo que es como guardo la variable donde traduce, ahora sí que sí me pueden echar la mano, dado que ya es lo último, y a esta hora ya mi cerebro no carbura más, gracias por el apoyo de antemano y que tengan un excelente día.
charmin
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-02-03 14:31 @646

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados