ASIX-M10-UF2. Emmagatzematge en fitxers II: XML, JSON

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

En la pràctica anterior vam veure com els fitxers de text és la forma bàsica d'emmagatzemar la informació. Quan la informació augmenta en complexitat i les dades estan relacionades, és necessari crear varis fitxers. Una altra possibilitat és utilitzar formats especials com XML o JSON per fer cabre en un sol fitxer tota aquesta informació relacionada. A més, els principals llenguatges de programació tenen llibreries per parsejar aquests formats.

Descàrrega

En el següent enllaç podem trobar la llista de codis postals en tres formats diferents: TXT, XML i MySQL:

De totes maneres, se't proporciona l'enllaç directe als fitxers:

Desenvolupament

Llista dels codis postals

Agafarem l'exemple dels codis postals de l'Estat espanyol. Aquest exemple no és trivial, té la seva complexitat. El que està clar és que donat un carrer i un número, només té un codi postal. Ara bé, no és cert que un carrer es correspongui amb un codi postal. Imaginem la Diagonal de Barcelona, que atravessa diferents barris. En les ciutats mitges i grans, és normal que un municipi, com ara Barcelona, tingui més d'un codi postal. En canvi, un mateix codi postal pot agrupar municipis petits. Per tant, no és certa la relació "un municipi té molts codis postals". Tampoc és cert dir "un codi postal es correspon a un municipi".

En el següent enllaç podem trobar la llista de codis postals en tres formats diferents: TXT, XML i MySQL:

En aquesta pràctica ens interessa veure com la mateixa informació la podem inquibir en formats de dades diferents. A més de TXT i XML, ens interessarà el format JSON, que s'utilitza molt avui dia. El format MySQL com ja saps no es correspon a emmagatzematge en fitxers, sinó que són els fitxers (els datafiles) de la base de dades relacional MySQL. És a dir, es correspon a unes taules relacionals com les que veies l'any passat i tornarem a veure des de la següent pràctica fins a final de curs.

En cas de què tinguis problemes amb l'enllaça anterior, aquí pots descarregar els tres formats:

Format TXT

Consta de dos fitxers ANSI amb columnes separades por ";". El primer conté el llistat de províncies, i el segon amb el llistat de municipis i carrers.

El fitxer de províncies només té dues columnes. La primera indica el codi de la província; i la segona el nom de la província.

El fitxer de municipis i carrers és més complex:

  • 1a columna: El codi de la província.
  • 3a columna: Si és un municipi (false) o un carrer (true).
  • 2a columna: Si és un municipi, el nom de la província. Si és una carrer, el nom de la ciutat.
  • 4a columna: El codi postal.
  • 5a columna: Si és un municipi, el nom del municipi. Si és un carrer, el nom del carrer.

Com ja hem comentat, la gestió dels codis postals no és fàcil perquè ja hem comentat les diferents causístiques que hi ha. Això es tradueix en què aquest segon fitxer de municipis té la seva complexitat d'entendre. Estudia'l amb deteniment fins que hagis entès bé el seu funcionament.

Com podríem trobar tots els carrers del codi postal 08172, i a quin municipi i província pertany? Si ho volem fer manualment hem d'obrir els fitxers amb un processador de text i utiltizar la funció de cerca. Si entens bé la dinàmica del fitxer, no et serà difícil respondre aquesta pregunta. (Feina a realitzar per l'alumne).

Format XML

Malauradament, el codi XML, que consta de 179000 files (6,5 MB), està mal formatat. Amb tot el que saps de l'any passat, pots veure l'error? Per simplicitat agafem només un tros de de les dades:

<?xml version="1.0" encoding="UTF-8"?>
<spain>
<provincia nombre="Alava">
<codigo-postal value="01001">
<municipio nombre="Vitoria-Gasteiz" />
<calle nombre="ABREVADERO"/>
<calle nombre="ALBERCA VIEJA,Callejon"/>
<calle nombre="ANORBIN DE,Canton"/>
<calle nombre="ARQUILLOS,Escaleras"/>
<calle nombre="ARQUILLOS,Pasealekua"/>
<calle nombre="BARRANCAL"/>
<calle nombre="BRULLERIA,Plaza"/>
</codigo-postal>
</provincia>
</spain>

Si ens fixem bé, en les dades originals tanquem l'etiqueta municipi just abans de posar la relació de tots els noms de carrers d'aquest municipi. Per tant, la forma correcta és:

<?xml version="1.0" encoding="UTF-8"?>
<spain>
<provincia nombre="Alava">
<codigo-postal value="01001">
<municipio nombre="Vitoria-Gasteiz" >
<calle nombre="ABREVADERO"/>
<calle nombre="ALBERCA VIEJA,Callejon"/>
<calle nombre="ANORBIN DE,Canton"/>
<calle nombre="ARQUILLOS,Escaleras"/>
<calle nombre="ARQUILLOS,Pasealekua"/>
<calle nombre="BARRANCAL"/>
<calle nombre="BRULLERIA,Plaza"/>
</municipio>
</codigo-postal>
</provincia>
</spain>

Aquest error té conseqüències més o menys greu, per la qual cosa utilitzarem una versió reduïda i correcta del codi. Fitxer cp_extracte.xml. És una base de dades molt petita d'uns quants codis postals de les primeres províncies: Àlava i Albacete. Fixa't bé que en aquest exemple hem considerat les possibilitats de què un municipi contingui varis cp; que un cp abarqui un sol municipi; i que un cp abarqui varis municipis.

Fitxer cp_extracte.xml:

<?xml version="1.0" encoding="UTF-8"?>
<spain>
<provincia nombre="Alava">
<codigo-postal value="01001">
<municipio nombre="Vitoria-Gasteiz" >
<calle nombre="ABREVADERO"/>
<calle nombre="ALBERCA VIEJA,Callejon"/>
<calle nombre="ANORBIN DE,Canton"/>
<calle nombre="ARQUILLOS,Escaleras"/>
<calle nombre="ARQUILLOS,Pasealekua"/>
<calle nombre="BARRANCAL"/>
<calle nombre="BRULLERIA,Plaza"/>
</municipio>
</codigo-postal>
<codigo-postal value="01002">
<municipio nombre="Vitoria-Gasteiz" >
<calle nombre="AMIZKARRA"/>
<calle nombre="ANDALUCIA   (Impares del 27 al final)  (Pares del 28 al final)"/>
<calle nombre="ANGLO VASCO"/>
<calle nombre="ARANA"/>
<calle nombre="ARRIETA,Plaza"/>
</municipio>
</codigo-postal>
</provincia>
<provincia nombre="Albacete">
<codigo-postal value="02001">
<municipio nombre="Albacete" >
<calle nombre="ALCALDE CONANGLA   (Pares del 2 al 82)"/>
<calle nombre="ALCALDE JOSE M. DE MIGUEL"/>
<calle nombre="ALCALDE MARTINEZ DE LA OSSA"/>
<calle nombre="ALTOZANO,Plaza"/>
<calle nombre="AZORIN"/>
<calle nombre="BOTICARIOS"/>
</municipio>
</codigo-postal>
<codigo-postal value="02002">
<municipio nombre="Albacete" >
<calle nombre="ALARCON"/>
<calle nombre="ALCALDE CONANGLA   (Pares del 84 al final)"/>
<calle nombre="AMPARO, DEL"/>
<calle nombre="ANDORRA"/>
</municipio>
</codigo-postal>
<codigo-postal value="02110">
<municipio nombre="GINETA, LA" />
<municipio nombre="GRAJUELA, LA" />
</codigo-postal>
<codigo-postal value="02120">
<municipio nombre="PEÑAS DE SAN PEDRO" />
</codigo-postal>
</provincia>
</spain>

Accedint a la informació des de PHP

El document XML no és més que un contenidor de tota aquesta informació. Les dades s'han de poder llegir i consultar, modificar, inserir, eliminar, filtrar. Per tant, necessitarem aplicacions externes que sàpiguen treballar amb aquests documents. Per exemple, si volem saber quin és el municipi del CP=08012 tenim moltes possibilitats. La més evident és obrir el fitxer amb un processador de textos i fer una cerca per '08012', sabent-ne interpretar tot el codi que veiem. Una altra possibilitat, i tenint en compte que estem en un cicle d'Administració de Sistemes, és fer-nos un script que sàpiga interpretar (en diem parsejar) el document XML.

Nosaltres utilitzarem en aquesta pràctica el llenguatge PHP com a llenguatge de scipt. Però compte no ens confonguem! No es tracta de fer una pàgina web. Es tracta d'utilitzar el PHP com a llenguatge de script, que utilitzarem des de la consola.

Per parsejar els fitxers XML des de PHP utilitzarem SimpleXML, per simplicitat:

Hi hauria altres opcions.

$ sudo apt-get install php php-cli

cli significa Command Line Interface, i bàsicament instal.la la utilitat php que podem executar en línia de comandes:

$ php -h
Usage: php [options] [-f] <file> [--] [args...]
       php [options] -r <code> [--] [args...]
...

Per tant, NO hem d'instal.lar el paquet libapache2-mod-php5 que fa referència a instal.lar el llenguatge PHP per fer scripts en els servidors webs, que és la base de la programació web.

$ sudo apt-cache search simplexml
...
php-xml - DOM, SimpleXML, WDDX, XML, and XSL module for PHP [default]

$ sudo apt-get install php-xml

A continuació se't proporciona diversos scripts per accedir a diferents nivells de la informació amb php. Fixa't l'ús dels bucles per tal de recórrer els diferents elements continguts en el fitxer.

script nivell_1.php:

<?php
//primer nivell, llistem les províncies
$xml=simplexml_load_file("cp_extracte.xml");
echo $xml->getName() . "\
";

foreach($xml->children() as $child) {
  echo $child->getName() . ": " . $child->attributes()->nombre . "\
";
}
?>

script nivell_2.php:

<?php
//segon nivell. Dins de cada província, vull llistar els codis postals
$xml=simplexml_load_file("cp_extracte.xml");
echo $xml->getName() . "\
";

//províncies
foreach($xml->children() as $child_prov) {
\techo $child_prov->getName() . ": " . $child_prov->attributes()->nombre . "\
";

\t//codis postals
\tforeach($child_prov->children() as $child_cp) {
\t\techo "\\t" . $child_cp->getName() . ": " . $child_cp->attributes()->value . "\
";
\t}
}
?>

script nivell_3.php:

<?php
//Tercer nivell. Dins de cada codi postal, vull llistar els municipis. Fixem-nos que un codi postal pot tenir varis municipis. Això passarà en els municipis petits.
$xml=simplexml_load_file("cp_extracte.xml");
echo $xml->getName() . "\
";

//províncies
foreach($xml->children() as $child_prov) {
\techo $child_prov->getName() . ": " . $child_prov->attributes()->nombre . "\
";

\t//codis postals
\tforeach($child_prov->children() as $child_cp) {
\t\techo "\\t" . $child_cp->getName() . ": " . $child_cp->attributes()->value . "\
";

\t\t//municipis
\t\tforeach($child_cp->children() as $child_mun) {
\t\t\techo "\\t\\t" . $child_mun->getName() . ": " . $child_mun->attributes()->nombre . "\
";
\t\t}
\t}
}
?>

script nivell_4.php:

<?php
//Quart nivell. Dins de cada municipi i cp, vull llistar els carrers. Fixem-nos que hi ha municipis amb un sol codi postal, i en aquest cas no hi ha relació de carrers.

$xml=simplexml_load_file("cp_extracte.xml");
echo $xml->getName() . "\
";

//províncies
foreach($xml->children() as $child_prov) {
\techo $child_prov->getName() . ": " . $child_prov->attributes()->nombre . "\
";

\t//codis postals
\tforeach($child_prov->children() as $child_cp) {
\t\techo "\\t" . $child_cp->getName() . ": " . $child_cp->attributes()->value . "\
";

\t\t//municipis
\t\tforeach($child_cp->children() as $child_mun) {
\t\t\techo "\\t\\t" . $child_mun->getName() . ": " . $child_mun->attributes()->nombre . "\
";

\t\t\t//carrers
\t\t\tforeach($child_mun->children() as $child_car) {
\t\t\t\techo "\\t\\t\\t" . $child_car->getName() . ": " . $child_car->attributes()->nombre . "\
";
\t\t\t}

\t\t}
\t}
}
?>

script municipis_dun_cp.php:

<?php
//amb SQL estàs acostumat a filtrar la informació amb la clàusula WHERE. Però en aquest cas, accedint a un document XML des d'un llenguatge de programació com PHP, necessitarem un condicional if
//el primer que fem és mirar el codi postal que hem passat per línia de comandes.
//per ex,
// $ php municipis_dun_cp.php 02110
$cp = $argv[1];
echo "Codi postal a filtrar: " . $cp . "\
";

$xml=simplexml_load_file("cp_extracte.xml");

//províncies
foreach($xml->children() as $child_prov) {
\t$provincia = $child_prov->attributes()->nombre;

\t//codis postals
\tforeach($child_prov->children() as $child_cp) {
\t\tif ( $child_cp->attributes()->value == $cp ) {
\t\t\techo "Província: " . $provincia . "\
";
\t\t\t//municipis
\t\t\tforeach($child_cp->children() as $child_mun) {
\t\t\t\techo $child_mun->attributes()->nombre . "\
";
\t\t\t}
\t\t}
\t}
}
?>

Per executar aquest script hem de passar el codi postal com a argument. Per exemple:

$ php municipis_dun_cp.php 02110

Format JSON

Per entendre el format JSON, és interessant fer una correspondència entre el fitxer XML i el fitxer JSON resultant.

primer nivell: províncies

XML:

<?xml version="1.0" encoding="UTF-8"?>
<spain>
<provincia nombre="Alava">
</provincia>
<provincia nombre="Albacete">
</provincia>
</spain>

JSON equivalent:

{ "spain": {
\t"provincia" : [
\t\t{ "nombre":"Alava" },
\t\t{ "nombre":"Albacete" }
\t\t]
\t}
}

La forma més nativa d'accedir al format JSON és amb Javascript (amb la funció eval() de Javascript). Però també podem accedir des de PHP al format JSON.

segon nivell: codis postals

XML:

<?xml version="1.0" encoding="UTF-8"?>
<spain>
<provincia nombre="Alava">
<codigo-postal value="01001">
</codigo-postal>
<codigo-postal value="01002">
</codigo-postal>
</provincia>
<provincia nombre="Albacete">
<codigo-postal value="02001">
</codigo-postal>
<codigo-postal value="02002">
</codigo-postal>
<codigo-postal value="02110">
</codigo-postal>
<codigo-postal value="02120">
</codigo-postal>
</provincia>
</spain>

JSON equivalent:

{ "spain": {
\t"provincia" : [
\t\t{ "nombre":"Alava" , "codigo-postal" : [ 
\t\t\t{"value":"01001" }, 
\t\t\t{"value":"01002" } 
\t\t] },
\t\t{ "nombre":"Albacete" , "codigo-postal" : [
\t\t\t{"value":"02001" }, 
\t\t\t{"value":"02002" }, 
\t\t\t{"value":"02110" }, 
\t\t\t{"value":"02120" }
\t\t] } 
\t]
\t}
}

Tercer nivell: municipis

<?xml version="1.0" encoding="UTF-8"?>
<spain>
<provincia nombre="Alava">
<codigo-postal value="01001">
<municipio nombre="Vitoria-Gasteiz" >
</municipio>
</codigo-postal>
<codigo-postal value="01002">
<municipio nombre="Vitoria-Gasteiz" >
</municipio>
</codigo-postal>
</provincia>
<provincia nombre="Albacete">
<codigo-postal value="02001">
<municipio nombre="Albacete" >
</municipio>
</codigo-postal>
<codigo-postal value="02002">
<municipio nombre="Albacete" >
</municipio>
</codigo-postal>
<codigo-postal value="02110">
<municipio nombre="GINETA, LA" />
<municipio nombre="GRAJUELA, LA" />
</codigo-postal>
<codigo-postal value="02120">
<municipio nombre="PEÑAS DE SAN PEDRO" />
</codigo-postal>
</provincia>
</spain>

Equivalent JSON:

Amb el següent format no admet que un cp tingui varis municipis:

{ "spain": {
\t"provincia" : [
\t\t{ "nombre":"Alava" , "codigo-postal" : [ 
\t\t\t{"value":"01001", "municipi":"Vitoria-Gasteiz" }, 
\t\t\t{"value":"01002", "municipi":"Vitoria-Gasteiz" } 
\t\t] },
\t\t{ "nombre":"Albacete" , "codigo-postal" : [
\t\t\t{"value":"02001", "municipi":"Albacete" }, 
\t\t\t{"value":"02002", "municipi":"Albacete" }, 
\t\t\t{"value":"02110", "municipi":"GINETA, LA" }, 
\t\t\t{"value":"02120", "municipi":"PEÑAS DE SAN PEDRO" }
\t\t] } 
\t]
\t}
}

o bé, sSi volem que un cp tingui varis municipis hem de fer que municipi sigui un objecte:

{ "spain": {
\t"provincia" : [
\t\t{ "nombre":"Alava" , "codigo-postal" : [ 
\t\t\t{"value":"01001", "municipi":{"nombre":"Vitoria-Gasteiz"} }, 
\t\t\t{"value":"01002", "municipi":{"nombre":"Vitoria-Gasteiz"} } 
\t\t] },
\t\t{ "nombre":"Albacete" , "codigo-postal" : [
\t\t\t{"value":"02001", "municipi":{"nombre":"Albacete"} }, 
\t\t\t{"value":"02002", "municipi":{"nombre":"Albacete"} }, 
\t\t\t{"value":"02110", "municipi":[
\t\t\t\t{"nombre":"GINETA, LA"},
\t\t\t\t{"nombre":"GRAJUELA, LA"}
\t\t\t] }, 
\t\t\t{"value":"02120", "municipi":{"nombre":"PEÑAS DE SAN PEDRO"} }
\t\t] } 
\t]
\t}
}

Quart nivell: carrers

<?xml version="1.0" encoding="UTF-8"?>
<spain>
<provincia nombre="Alava">
<codigo-postal value="01001">
<municipio nombre="Vitoria-Gasteiz" >
<calle nombre="ABREVADERO"/>
<calle nombre="ALBERCA VIEJA,Callejon"/>
<calle nombre="ANORBIN DE,Canton"/>
<calle nombre="ARQUILLOS,Escaleras"/>
<calle nombre="ARQUILLOS,Pasealekua"/>
<calle nombre="BARRANCAL"/>
<calle nombre="BRULLERIA,Plaza"/>
</municipio>
</codigo-postal>
<codigo-postal value="01002">
<municipio nombre="Vitoria-Gasteiz" >
<calle nombre="AMIZKARRA"/>
<calle nombre="ANDALUCIA   (Impares del 27 al final)  (Pares del 28 al final)"/>
<calle nombre="ANGLO VASCO"/>
<calle nombre="ARANA"/>
<calle nombre="ARRIETA,Plaza"/>
</municipio>
</codigo-postal>
</provincia>
<provincia nombre="Albacete">
<codigo-postal value="02001">
<municipio nombre="Albacete" >
<calle nombre="ALCALDE CONANGLA   (Pares del 2 al 82)"/>
<calle nombre="ALCALDE JOSE M. DE MIGUEL"/>
<calle nombre="ALCALDE MARTINEZ DE LA OSSA"/>
<calle nombre="ALTOZANO,Plaza"/>
<calle nombre="AZORIN"/>
<calle nombre="BOTICARIOS"/>
</municipio>
</codigo-postal>
<codigo-postal value="02002">
<municipio nombre="Albacete" >
<calle nombre="ALARCON"/>
<calle nombre="ALCALDE CONANGLA   (Pares del 84 al final)"/>
<calle nombre="AMPARO, DEL"/>
<calle nombre="ANDORRA"/>
</municipio>
</codigo-postal>
<codigo-postal value="02110">
<municipio nombre="GINETA, LA" />
<municipio nombre="GRAJUELA, LA" />
</codigo-postal>
<codigo-postal value="02120">
<municipio nombre="PEÑAS DE SAN PEDRO" />
</codigo-postal>
</provincia>
</spain>

Equivalent JSON:

{ "spain": {
\t"provincia" : [
\t\t{ "nombre":"Alava" , "codigo-postal" : [ 
\t\t\t{"value":"01001", "municipi":{"nombre":"Vitoria-Gasteiz", "calle":[
\t\t\t\t{"nombre","carrer1"},
\t\t\t\t{"nombre","carrer2"},
\t\t\t\t{"nombre","carrer3"}
\t\t\t] } }, 
\t\t\t{"value":"01002", "municipi":{"nombre":"Vitoria-Gasteiz", "calle":[
\t\t\t\t{"nombre","carrer4"},
\t\t\t\t{"nombre","carrer5"},
\t\t\t\t{"nombre","carrer6"}
\t\t\t] } } 
\t\t] },
\t\t{ "nombre":"Albacete" , "codigo-postal" : [
\t\t\t{"value":"02001", "municipi":{"nombre":"Albacete", "calle":[
\t\t\t\t{"nombre","carrer7"},
\t\t\t\t{"nombre","carrer8"},
\t\t\t\t{"nombre","carrer9"}
\t\t\t] } }, 
\t\t\t{"value":"02002", "municipi":{"nombre":"Albacete", "calle":[
\t\t\t\t{"nombre","carrer10"},
\t\t\t\t{"nombre","carrer11"},
\t\t\t\t{"nombre","carrer12"}
\t\t\t] } }, 
\t\t\t{"value":"02110", "municipi":[
\t\t\t\t{"nombre":"GINETA, LA"},
\t\t\t\t{"nombre":"GRAJUELA, LA"}
\t\t\t] }, 
\t\t\t{"value":"02120", "municipi":{"nombre":"PEÑAS DE SAN PEDRO"} }
\t\t] } 
\t]
\t}
}

Parsejar amb Javascript

En aquest primer exemple simplificarem una mica el format JSON. El fitxer que volem parsejar és un llistat de províncies:

{\t"provincies" : [';
\t{ "provincia":"Alava" },';
\t{ "provincia":"Albacete" }';
\t]';
}';

Incrustarem el codi Javascript en un fitxer html. Fitxer json.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Codis postals</title>
<meta http-equiv="content-type" content="text/html charset=utf-8" />
<script>
function parse_json()
{
\tvar jsondata = '';
\tjsondata +=\t'{\t"provincies" : [';
\tjsondata +=\t'\t{ "provincia":"Alava" },';
\tjsondata +=\t'\t{ "provincia":"Albacete" }';
\tjsondata +=\t'\t]';
\tjsondata +=\t'}';

\t//alert(jsondata);

\tvar jsondata = eval("("+jsondata+")"); //retrieve result as an JavaScript object
\tvar rsprovincies = jsondata.provincies;
\t//alert(rsprovincies.length);

\tvar output = '<ul>';
\tfor (var i = 0; i < rsprovincies.length; i++){
\t\toutput += '<li>';
\t\toutput += rsprovincies[i].provincia ;
\t\toutput += '</li>';\t
\t}\t
\toutput += '</ul>';

\tdocument.getElementById("info").innerHTML = output;
}
</script>
</head>
<body onload='parse_json()'>
<h1>Províncies</h1>
<div id="info">
</div>
</body>
</html>

Carreguem el fitxer html amb un navegador web, i podem veure la llista de municipis.

De la mateixa manera que ho hem parsejat amb javascript, també ho podem fer amb PHP. I en els diferents exemples, podem accedir a la informació de les províncies, codis postals, municipis i carrers.

Feina a realitzar per l'alumne

Feina a realitzar per l'alumne

Entregar al Google Classroom el pdf amb el següents exercicis.

0. Llegeix-me i conclusions

1. A partir dels fitxers en format txt, trobar tots els carrers del codi postal 08172, i a quin municipi i província pertany?

2. En el format XML, se t'ha proporcionat un llistat molt mínim de codis postals i municipis (donat que el fitxer original conté un error, com s'ha comentat). Genera el fitxer girona.xml, amb els codis postals de tota la província de Girona, ben formatat (NOTA. En el fitxer hauràs de cercar per Gerona i no per Girona. El municipi de Girona és l'únic de la seva província que té diferents codis postals, i que per tant apareix la informació dels carrers). Prova els diferents scripts que s'han comentat a classe amb els codis postals de Girona. Volca els resultats obtinguts a un fitxer. Per volcar els resultats faràs:

$ php nivell_4.php > girona_nivell4.txt

3. A partir del fitxer XML, i utilitzant un script PHP, genera el fitxer CSV per als codis postals de Girona, que conté la següent informació:

província;cp;municipi;carrer

Per fer-ho, has de saber com es pot escriure en un fitxer des de codi PHP (http://www.w3schools.com/php/php_file_create.asp).

Si el codi postal no conté informació de cap carrer, aleshores posa NULL. El resultat serà similar a:

Gerona;17001;Girona;ALVAREZ DE CASTRO   (Impares del 1 al final)  (Pares del 2 al final)
Gerona;17001;Girona;ANSELM CLAVE
Gerona;17001;Girona;ARTILLERS
Gerona;17001;Girona;ASSEMBLEA DE CATALUNYA,Plaça
...
Gerona;17142;VERGES;NULL
...

solució: Fitxer:Girona.zip

Entrega

Els alumnes entregaran al Google Classroom tots els fitxers generats. S'empaquetaran tots aquests fitxers i es pujaran al Google Classroom dins del termini d'entrega de la pràctica.

Recorda la normativa per entregar les pràctiques al Google Classroom: ASIX-M10-UF2#Normativa_d.27entrega_de_les_pr.C3.A0ctiques_al_Google_Classroom


creat per Joan Quintana Compte, octubre 2018, octubre 2020