- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Risolto] Trasformare un file .txt in un array di array
-
Le righe hanno lo stesso carattere delimitatore dei valori presenti sulle righe?
-
Sì, ci sono solo due delimitatori nel file:
- Quello di fine linea, suppongo '\n' essendo comune sia per quelli scritti con Linux ('\n') che con Windows ('\r\n');
- All'interno di una stessa riga l'altro separatore tra gli elementi è '/'
Mi scuso per l'eventuale imprecisazione.
-
Bene e l'eventuale utilizzo di questi array?
Tipo un ciclo per scrivere la prima riga contentie queste parole... la seconda queste.... ecc?
-
Esatto, mi piacerebbe ricavare i singoli elementi disponendoli ordinatamente, e magari anche le singole dimensioni degli array annidati, per esempio il 5.o del primo post (riporto per comodità, "4" => array("a","d","e")) dovrebbe riportare 3.
Grazie.
-
Ok... un po di analisi...
E vedo ok... ?
E se la dimensione fosse calcolata non a priori, ma mentre splitti andrebbe bene lo stesso?
-
Sì, va benissimo anche il calcolo della dimensione in un momento successivo.
Prenditi tutto il tempo di cui hai bisogno, anch'io sto facendo delle ricerche online...
-
Non ho avuto modo di provare il codice qui sotto, ma mi è venuta in mente questa possibile soluzione almeno per trasferire i dati dal file all'array di array che consiste nel rimuovere la riga con il solo slash in fase di lettura.
Ecco il prototipo:[php]
// Legge il file e rimuove l'elemento inutile
$contenuto_file = file_get_contents("elenco.txt");
$contenuto_file = str_replace('/\n', '', $contenuto_file); // per file testuali Linux
$contenuto_file = str_replace('/\r\n', '', $contenuto_file); // per file testuali Windows// Inserisce nell'array le righe del file e poi crea quelli annidati
$array = explode('\n', $contenuto_file);
$array = explode('/', $array);
[/php]Per le altre operazioni non saprei come procedere.
-
Una cosa cosi può andare bene come inizio?
[php]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Analisi testo</title>
<style type="text/css">
html,body
{
margin:0px;
padding:0px;
background:#AAD4FF;
}
</style>
</head>
<body>
<?php
$percorsoFile="testo.txt";
$contenuto_file=file_get_contents($percorsoFile);
$righe=split("\n",$contenuto_file);
$numerorighe=count($righe);
echo "Il file contiene $numerorighe righe.<br />";
$numeroriga=0;
foreach($righe as &$riga)
{
$numeroriga=$numeroriga+1;
$elementi=explode("/",$riga);
$numeroElementi=count($elementi)-1;
echo "La riga numero $numeroriga contiene $numeroElementi elementi<br />";
$numeroElemento=0;
foreach($elementi as &$elementoriga)
{
$numeroElemento=$numeroElemento+1;
if($numeroElemento>1)
{
echo "==>$elementoriga<==<br />";
}
}
}
?>
</body>
</html>
[/php]
-
Mi sembra buono ma non ho capito una cosa, perché nei foreach(){ } metti come argomento un reference anziché il nome della variabile, in sostanza non dovrebbe essere, per esempio:
foreach($righe as $riga){/.../}
Grazie.
-
Beh, nel php sono solo dilettante, però ho visto che la sintassi data sembra essere quella.
-
Generalmente ad una variabile viene esplicitato il reference nel parametro formale della funzione quando questa ne cambierà il contenuto. In questo caso non c'era alcun problema
Stavo facendo una prova e mi sembra che ci sia un problema poiché prende in considerazione pure la riga con il solo slash che invece non dovrebbe prendere.
Ho messo temporaneamente sul mio sito l'effetto a questo riferimento che poi rimuoverò:
w w w.cervia.name/esperimento1.php
il file di testo è qui:
w w w.cervia.name/testo.txtGrazie, ciao.
-
Beh puoi sempre fare un trim dell'elemento e se quest'ultimo è uguale alla stringa vuota allora non stamparlo, non considerarlo.
-
Giusta osservazione.
Visto che il problema è stato risolto mi accingo a:- sostituire i link del mio post precedente con "...omissis...";
- mettere "Risolto" al titolo del primo post.
Grazie,
<addendum>
Contrordine, mi accorgo solo ora che non è più possibile modificare i post precedenti nonostante la buona intenzione...
</addendum>
-
E' lo si può fare entro 30 minuti...
Ora vedo se chi ha il potere lo può fare.