Página 1 de 1

Filtrar caracteres

NotaPublicado: 2012-07-11 17:05 @753
por kiazz
Soy nueva en esto del manejo de Perl. La verdad es que jamás lo había usado... He estado buscando mucho en Internet pero no he hallado nada que me ayude...

Mi problema es que leo un archivo de texto y después me crea otro archivo de texto con todas sus líneas (eso ya lo hace). Mi problema es que al enviarlo al otro archivo tengo que eliminar algunos caracteres de algunas líneas y en otras remplazar.

Mi pregunta es si existe alguna instrucción que me permita posicionarme en donde yo le diga y remplazar o eliminar la cantidad de caracteres que yo le diga. Y ya después pasar todas sus líneas ya con el formato nuevo...

Les agradecería mucho su ayuda...

GRACIAS.

Re: Filtrar caracteres

NotaPublicado: 2012-07-11 18:52 @828
por explorer
Bienvenida a los foros de Perl en Español, kiazz.

Para eliminar caracteres dentro de una cadena de caracteres, puedes usar la función substr().

Por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use feature 'say';
  2.  
  3. $s = "La casa de la abuela es verde.";
  4. substr($s, 20, 9) = "";                 # borrado
  5. say $s;                                 # La casa de la abuela.
  6.  
  7. $s = "La casa de la abuela es verde.";
  8. substr($s, 24, 5) = "blanca";           # sustitución
  9. say $s;                                 # La casa de la abuela es blanca.
  10.  
  11. $s = "La casa de la abuela es verde.";
  12. substr($s, 29, 0) = " y soleada";       # inserción
  13. say $s;                                 # La casa de la abuela es verde y soleada.
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

Tienes más información en tu ordenador, escribiendo perldoc -f substr .

También puedes usar expresiones regulares, si la posición a cambiar es desconocida, y depende del "aspecto" o un "patrón" para encontrarla.

Re: Filtrar caracteres

NotaPublicado: 2012-07-13 21:39 @944
por reLlene
¡¡Bienvenida, kiazz!!

Es más sencillo que lo hagas directamente desde Linux, es decir, para qué editar tu propio script si Linux te permite (o no, por eso nos tienes que mostrar lo que ya tienes hecho) hacerlo de la siguiente forma:

Imagina, por ejemplo, que tienes un fichero con campos en los que el separador es el tabulador y queremos sustituir este carácter separador por otro carácter separador, como por ejemplo el punto y coma (;). Desde la terminal, lo haremos de la siguiente manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl nombreDeTuScript.pl |sed 's/\t/;/g' >>archivosalida.txt
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Fíjate que el >> escribirá en un nuevo archivo con el nombre que tu le quieras dar.

o bien:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl nombreDeTuScript.pl |grep -v 'LIKE' >>archivosalida.txt
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

nos muestra todas las líneas donde aparezca la palabra 'LIKE'.

Puedes ahorrarte muchos dolores de cabeza con este tipo de comandos que nos brinda unix, para algo están, así que acostúmbrate a usarlos porque los necesitarás en más de una oportunidad. Si quieres, puedes buscar más por "sed" o "grep" en San Google, claro.

Re: Filtrar caracteres

NotaPublicado: 2012-07-14 08:52 @411
por danimera
Hummm, ¿y si será que está trabajando desde Linux ? Pos es posible que también lo haga desde Windows, así que la respuesta debería ser más general, ¿no lo crees...? En todo caso... no importa ¡je,je!

Re: Filtrar caracteres

NotaPublicado: 2012-07-14 09:15 @427
por explorer
El utilizar los comandos de Unix está muy bien para ciertas aplicaciones y soluciones. Muchas veces, con la combinación de unos pocos comandos, resolvemos muchos problemas de administración o manipulación de datos.

Hay una limitación: la invocación de cada comando representa la carga y ejecución de un programa entero (pequeño, pero un programa). En ciertas situaciones, eso puede ser algo costoso, en términos de consumo de recursos de memoria y procesador. Un ejemplo son los dæmon que se ejecutan de forma periódica, para tareas administrativas (monitores, estadísticas, avisos automáticos, etc.) Si son muchos procesos y/o se ejecutan cada poco tiempo, puede ser significativo el consumo de recursos. Y no siempre estamos hablando de un PC o de un portátil. Podría ser una tableta o un móvil (celular).

Conocer estas herramientas del shell es fundamental para la gente que trabajamos en Unix, pues a veces nos encontraremos con sistemas que no tienen Perl (algo realmente extraño), así que no nos quedará más remedio que usar awk, sed, y demás familia.

Pero, teniendo Perl a mano, puede simplificar bastante el desarrollo, mantenimiento, y consumo de recursos.

Precisamente estos días me encuentro "traduciendo" muchos scripts escritos en shell, para el sistema de monitorización MRTG, con docenas de llamadas a comandos Unix, a un único programa Perl. Los tiempos de ejecución y consumo de memoria son muy apreciables.

Y lo que dice danimera también es cierto: si está en Windows, es muy posible que no disponga de esas utilerías (actualmente, solo estarán disponibles si el usuario ha instalado el paquete de herramientas Unix para Windows, o el paquete Cygwin).

En el caso de los dos ejemplos que muestra reLlene, la funcionalidad de las llamadas a sed y grep, puede ser sustituida con solo dos líneas, dentro del programa Perl.

Con esto, no estoy desmereciendo el uso del shell. Al contrario: hay que conocerlo muy bien, pues de esa manera luego se pueden entender muchas de las funcionalidades que nos da Perl.