Diferència entre revisions de la pàgina «M06 UF1Pr1. Llegir fitxer amb llenguatges interpretats»
m |
m (→Entrega) |
||
| Línia 252: | Línia 252: | ||
Entrega al Classroom dins del període indicat. | Entrega al Classroom dins del període indicat. | ||
| − | Entregaràs un pdf amb captures de pantalla on mostraràs que has assolit els objectius d'executar els scripts que se't proposen | + | Entregaràs un pdf amb captures de pantalla on mostraràs que has assolit els objectius d'executar els scripts que se't proposen. Com a fitxer de text escolliràs un paràgraf d'una obra de la literatura universal (de l'idioma que vulguis). |
| + | |||
#Python | #Python | ||
#PHP | #PHP | ||
Revisió de 15:25, 27 set 2021
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 permetran treballar de forma interactiva amb la consola, o bé executar totes les comandes en bloc cridant a un script que contingui totes les ordres.
Diferents llenguatges interpretats
Bash
NOTA: no cal que ho faci l'alumne
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:
$ python3 --version Python 3.8.10
$ python3 Python 3.8.10 (default, Jun 2 2021, 10:49:15) [GCC 9.4.0] on linux 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)
$ python3 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
NOTA: no cal que ho faci l'alumne
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, ...
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 php-common php-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.
Javascript
Amb NodeJS és molt fàcil:
const fs = require('fs')
fs.readFile('ara_mateix.txt', 'utf8' , (err, data) => {
if (err) {
console.error(err)
return
}
console.log(data)
})
$ node ara_mateix.js
I amb el Javascript del navegador també ho podem fer. En aquest cas un formulari on podrem escollir un fitxer de text:
ara_mateix.html:
<html>
<head>
<title>Llegir un fitxer amb Javascript</title>
</head>
<body>
<h2>Llegir el contingut d'un fitxer local</h2>
<ul><li>https://www.delftstack.com/howto/javascript/javascript-read-file-line-by-line/</li></ul>
<input type="file" name="file" id="file" />
<p id="contingut"></p>
</body>
</html>
<script>
//https://stackoverflow.com/questions/1144783/how-to-replace-all-occurrences-of-a-string-in-javascript
function escapeRegExp(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
function replaceAll(str, find, replace) {
return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}
document.getElementById('file').onchange = function(){
console.log('a1');
var file = this.files[0];
var reader = new FileReader();
reader.onload = function(progressEvent){
console.log(this.result);
//var cad = this.result.replace('\n','<br />')
var cad = replaceAll(this.result,'\n','<br />');
document.getElementById("contingut").innerHTML = cad;
};
reader.readAsText(file);
};
</script>
Seguretat
- JavaScript does not have direct access to the local files due to security and privacy.
- We can offer the user the possibility to select files via a file input element that we can then process.
- The file input has a files property with the selected file(s).
- We can use a FileReader to access the content of the selected file(s).
Altres
codi Javascript de Google Apps
Entrega
Entrega al Classroom dins del període indicat.
Entregaràs un pdf amb captures de pantalla on mostraràs que has assolit els objectius d'executar els scripts que se't proposen. Com a fitxer de text escolliràs un paràgraf d'una obra de la literatura universal (de l'idioma que vulguis).
- Python
- PHP
- Node
- Javascript (HTML)
- Partint de la idea del formulari web on pots escollir un fitxer de text, ara escolliràs una imatge i la representaràs per pantalla. Ajuda:
creat per Joan Quintana Compte, setembre 2021