• Publicidad

Función para abrir archivos

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

Función para abrir archivos

Notapor BigBear » 2014-10-30 15:41 @695

Hola, tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub abrir_archivo {
  2. if ($^O =~/Win32/ig) {
  3. system('"'.$_[0].'"');
  4. } else {
  5. system("gedit ".$_[0]);
  6. }
  7. }
  8.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El tema es que la función en Windows no abre bien porque cuando la ruta tiene espacios da error. Recuerdo que en este foro me habían ayudado y me dijeron que agregara " a la ruta. Lo hice pero sigue en lo mismo.

¿ Alguien me puede ayudar ? ¿ En Linux también está el mismo problema ?
Última edición por explorer el 2014-10-30 16:11 @716, editado 1 vez en total
Razón: Funcion => Función; codigo => código; funcion => función; windows => Windows; habian => habían; linux => Linux; tambien => también; esta => está;
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Función para abrir archivos

Notapor explorer » 2014-10-30 16:29 @728

La opción '/g' te sobra.

En el system() para Windows no estás indicando qué aplicación debe ejecutarse para que abra el archivo. Por ejemplo:

system(qq(notepad.exe "$_[0]"));

El operador qq() hace las mismas operaciones que las comillas dobles. Se usa para cuando el texto a entrecomillar ya tiene comillas.

Para Linux, también pasa lo mismo con el tema de los espacios, por ser una limitación del sistema de línea de comandos, no del sistema operativo o del lenguaje.

system(qq(gedit '$_[0]'));

La diferencia es que en Linux se suele usar comillas simples para rodear texto que queremos que el shell interprete de forma literal.

Caso distinto es abrir el archivo por parte de Perl. Perl lo hace fácil (como siempre, claro):
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ echo "Texto de prueba" > 'archivo con espacios.txt'
  2. $ ls -l archivo\ con\ espacios.txt
  3. -rw-r--r-- 1 explorer users 16 oct 30 22:16 archivo con espacios.txt
  4. $ perl -E 'open $fh, "<", "archivo con espacios.txt"; while (<$fh>) { print }'
  5. Texto de prueba
  6. $
Coloreado en 0.004 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: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Función para abrir archivos

Notapor explorer » 2014-10-30 16:54 @746

Acabo de acordarme que si a system() (o exec()) le pasamos más de un argumento, entonces los argumentos no pasan por la presencia de metacaracteres.

Entonces, quedaría así:

system('notepad.exe', $_[0]);

Por ejemplo, esto no funciona:

perl -E 'system("cat archivo con espacios.txt")'

pero esto sí:

perl -E 'system("cat", "archivo con espacios.txt")'
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Función para abrir archivos

Notapor Tizianatellez » 2014-11-19 06:56 @331

Muchas gracias, ¡tenía el mismo problema!
Última edición por explorer el 2014-11-19 07:01 @334, editado 1 vez en total
Razón: admiraciones; tenia => tenía;
Avatar de Usuario
Tizianatellez
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2014-10-31 04:01 @209
Ubicación: Burgo de Osma (Soria)


Volver a Básico

¿Quién está conectado?

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