Diferència entre revisions de la pàgina «M06 UF1Pr1. Llegir fitxer amb llenguatges interpretats»

De wikijoan
Salta a la navegació Salta a la cerca
(Es crea la pàgina amb «=Introducció= Llegirem el fitxer de text '''ara_mateix.txt''' <pre> Ara mateix, enfilo aquesta agulla amb el fil d'un propòsit que no dic, i em poso a apedaçar. Cap...».)
 
 
(Hi ha 3 revisions intermèdies del mateix usuari que no es mostren)
Línia 11: Línia 11:
 
</pre>
 
</pre>
 
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.
 
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.
=Bash=
+
=Diferents llenguatges interpretats=
 +
==Bash==
 
'''NOTA''': no cal que ho faci l'alumne
 
'''NOTA''': no cal que ho faci l'alumne
  
Línia 79: Línia 80:
 
</pre>
 
</pre>
  
=Python=
+
==Python==
 
*http://es.wikipedia.org/wiki/Python
 
*http://es.wikipedia.org/wiki/Python
 
Evidentment, per utilitzar Python has de tenir instal.lat aquest llenguatge (tant per  a Linux com Windows)
 
Evidentment, per utilitzar Python has de tenir instal.lat aquest llenguatge (tant per  a Linux com Windows)
Línia 126: Línia 127:
 
</pre>
 
</pre>
  
=Perl=
+
==Perl==
 +
'''NOTA''': no cal que ho faci l'alumne
 
*http://es.wikipedia.org/wiki/Perl
 
*http://es.wikipedia.org/wiki/Perl
 
'''ara_mateix.pl''':
 
'''ara_mateix.pl''':
Línia 159: Línia 161:
 
...
 
...
 
</pre>
 
</pre>
=PHP=
+
==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.
 
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.
 
<pre>
 
<pre>
Línia 182: Línia 184:
 
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.
 
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=
+
==Javascript==
 
Amb NodeJS és molt fàcil:
 
Amb NodeJS és molt fàcil:
 
*https://nodejs.dev/learn/reading-files-with-nodejs
 
*https://nodejs.dev/learn/reading-files-with-nodejs
Línia 200: Línia 202:
 
</pre>
 
</pre>
 
I amb el Javascript del navegador també ho podem fer. En aquest cas un formulari on podrem escollir un fitxer de text:
 
I amb el Javascript del navegador també ho podem fer. En aquest cas un formulari on podrem escollir un fitxer de text:
 
+
*https://www.delftstack.com/howto/javascript/javascript-read-file-line-by-line/
 
'''ara_mateix.html''':
 
'''ara_mateix.html''':
 
<pre>
 
<pre>
Línia 239: Línia 241:
 
</script>
 
</script>
 
</pre>
 
</pre>
 +
===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).
  
=Altres=
+
#Python
codi Javascript de Google Apps
+
#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:
 +
*https://50linesofco.de/post/2019-07-05-reading-local-files-with-javascript
  
 
{{Autor}}, setembre 2021
 
{{Autor}}, setembre 2021

Revisió de 15:25, 27 set 2021

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).

  1. Python
  2. PHP
  3. Node
  4. Javascript (HTML)
  5. 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