• Publicidad

Filtrar caracteres

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

Filtrar caracteres

Notapor kiazz » 2012-07-11 17:05 @753

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.
kiazz
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 1
Registrado: 2012-07-11 16:59 @749

Publicidad

Re: Filtrar caracteres

Notapor explorer » 2012-07-11 18:52 @828

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.008 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.
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12827
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Filtrar caracteres

Notapor reLlene » 2012-07-13 21:39 @944

¡¡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.006 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.006 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.
Última edición por reLlene el 2012-07-23 08:51 @410, editado 1 vez en total
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: Filtrar caracteres

Notapor danimera » 2012-07-14 08:52 @411

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!
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Vive para Perl en Español
Vive para Perl en Español
 
Mensajes: 782
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Filtrar caracteres

Notapor explorer » 2012-07-14 09:15 @427

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.
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12827
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot], Majestic-12 [Bot] y 0 invitados