Comparativa de llenguatges de script. Llegir un fitxer

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció

Llegirem el fitxer de text ara_mateix.txt

Ara mateix,
enfilo aquesta agulla amb el fil d'un propòsit que no dic,
i em poso a apedaçar.
Cap dels prodigis que anunciaven taumaturgs insignes
no s'ha complert.
I els anys passen de pressa,
de res a poc, i sempre amb vent de cara.

utilitzant diferents llenguatges de script interpretats. Aquests normalment ens permetrant treballar de forma interactiva amb la consola, o bé executar totes les comandes en bloc cridant a un script que contingui totes les ordres.

Bash

Bash ja està instal.lat per defecte en els sistemes Linux. Amb Bash podem utilitzar qualsevol de les comandes pròpies del sistema:

$ cat ara_mateix.txt 
Ara mateix,
enfilo aquesta agulla amb el fil d'un propòsit que no dic,
...
$ man cat

CAT(1)                          User Commands                          CAT(1)

NAME
       cat - concatenate files and print on the standard output

SYNOPSIS
       cat [OPTION]... [FILE]...
...

I si volem llegir el fitxer línia a línia, ho podem fer com a mínim d'aquestes tres maneres:

fitxer ara_mateix.sh:

#!/bin/bash        
 
FILENAME=ara_mateix.txt
while read line        
do        
    echo $line
done < $FILENAME

Donem permisos d'execució i executem el script:

$ sudo chmod a+x ara_mateix.sh
$ ./ara_mateix.sh 
Ara mateix,
enfilo aquesta agulla amb el fil d'un propòsit que no dic,
i em poso a apedaçar.
Cap dels prodigis que anunciaven taumaturgs insignes
no s'ha complert.
I els anys passen de pressa,
de res a poc, i sempre amb vent de cara.

Hi ha altres maneres de fer-ho:

ara_mateix2.sh:

#!/bin/bash  
cat ara_mateix.txt | while read a
do
echo $a
done

ara_mateix3.sh:

#!/bin/bash  
for a in `cat ara_mateix.txt`
do
echo $a
done

Python

Evidentment, per utilitzar Python has de tenir instal.lat aquest llenguatge (tant per a Linux com Windows)

Per executar comandes python invoquem al seu intèrpret de comandes:

$ python
Python 2.7.3 (default, Aug  1 2012, 05:16:07) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

i ara ja podem introduir les comandes adequades:

>>> f = open("ara_mateix.txt")
>>> f
<open file 'ara_mateix.txt', mode 'r' at 0xb7323f40>
>>> f.read()
"Ara mateix,\nenfilo aquesta agulla amb el fil d'un prop\xc3\xb2sit que no dic,\ni em poso a apeda\xc3\xa7ar.\nCap dels prodigis que anunciaven taumaturgs insignes\nno s'ha complert.\nI els anys passen de pressa,\nde res a poc, i sempre amb vent de cara.\n\n"
>>> f.close()
>>> quit()

Però és millor utilitzar un script Python (fitxer amb extensió .py que conté comandes python i executar totes les instruccions de forma desatesa:

fitxer ara_mateix.py:

import sys
fitxer = open('ara_mateix.txt','r')
for linia in fitxer:
	print linia
$ python ara_mateix.py 
Ara mateix,
enfilo aquesta agulla amb el fil d'un propòsit que no dic,
i em poso a apedaçar.
Cap dels prodigis que anunciaven taumaturgs insignes
no s'ha complert.
I els anys passen de pressa,
de res a poc, i sempre amb vent de cara.

Perl

ara_mateix.pl:

# Leer un fichero de texto
my $filename = 'ara_mateix.txt';
open INFILE,$filename;
my $linia;
while ( $linia = <INFILE>) {
    chomp($linia); 
    # Incluir aquí debajo el código para procesar la línea
    print $linia . "\n";
} 
close INFILE;

millor:

# Leer un fichero de texto
my $filename = 'ara_mateix.txt';
open INFILE,$filename;
my $linia;
while ( $linia = <INFILE>) {
    print $linia;
} 
close INFILE;
$ perl ara_mateix.pl
Ara mateix,
enfilo aquesta agulla amb el fil d'un propòsit que no dic,
...

Javascript

I amb Javascript també ho podem fer això de llegir un fitxer de text? En teoria si... però no és fàcil.

Com es comenta en l'enllaç:

Warning: This section describes the File component of the SpiderMonkey JavaScript interpreter. 
File is non-standard, not generally compiled into distributions, is a potential source of 
huge security holes, and not well tested.

Utilitzem el SpiderMonkey com a intèrpret de comandes. També l'utilitzarem en la següent pràctica.

El fitxer que volem testejar és el script ara_mateix.js:

var data; 
var file = new File("/home/joan/M06_WEB/comparar_scripts/ara_mateix.txt");
file.open("read", "text");
data = file.readln();
file.close(); 

i l'executem però no funciona:

~/M06_WEC/js-1.8.5/js/src$ ./js /home/joan/M06_WEC/comparar_scripts/ara_mateix.js
/home/joan/M06_WEC/comparar_scripts/ara_mateix.js:2: ReferenceError: File is not defined

Es queixa de que no troba l'objecte File. Per tal de què conegui què és un objecte File, tal com es comenta en l'enllaç, hauríem de compilar el SpiderMonkey amb aquesta compatibilitat:

$ make -f Makefile.ref JS_HAS_FILE_OBJECT=1

però de totes maneres no compila... s'hauria d'estudiar amb més deteniment i trobar una solució que de totes maneres no seria compatible amb totes les plataformes.

Nota. En entorns Windows possiblement llegir un fitxer de text amb Javascript sigui més fàcil:

Set oFSO = CreateObject("Scripting.FileSystemObject")
...

PHP

Amb PHP es pot accedir a llegir un fitxer, però estem parlant de fitxers en el cantó del servidor, no del client. En aquest cas utilitzarem el PHP en línia de comandes, que evidentment és la manera no-habitual de treballar amb PHP. Amb això es vol recalcar que PHP és un llenguatge de script que no té perquè estar associat a un servidor web i un navegador web. Els usuaris de Windows hauran d'esbrinar quina possibilitat tenen d'utilitzar PHP en línia de comandes. En cas de què no fos possible o fos complicat, executaran el codi en un entorn web.

$ sudo apt-get install php5-common php5-cli
<?php
// archivo txt
$filas=file('ara_mateix.txt');
// iniciamos contador y la fila a cero
$i=0;
while($filas[$i]!=NULL){
	echo $filas[$i];
	$i++;
}
?>

I executem el codi en línia de comandes:

$ php ara_mateix.php

Fixem-nos que no cal tenir instal.lat un servidor web. L'existència del llenguatge PHP és independent de què el servidor web Apache estigui present.

Altres

Set oFSO = CreateObject("Scripting.FileSystemObject")
...
var fso;
fso = new ActiveXObject("Scripting.FileSystemObject");

És un llenguatge que es va fer popular per fer pel.lícules de Flash incrustades a la web, i que també es pot utlitzar per accedir al filesystem.

TODO usuaris de Windows



creat per Joan Quintana Compte, setembre 2018

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines