Newsgroup: it.comp.www.php
Titolo: sopprimere i fine linea.

cercando di imparare il php, mi sono imbattuto in un problema che non
so risolvere.
vorrei stampare una stringa, ricavata da una unione di stringhe senza
ritorni a capo.
invece, per quanto provi, la stringa unione persiste a stampare un
ritorno a capo per ogni stringa originale, come se stessi chiamando
una successione di echo.
il codice php è il seguente:
<?
$i=0;
while (isset($tabellaDati[$i]->dato[0]))
  $stringa .= $tabellaDati[$i++]->dato[0];
echo $stringa;
?>
a sua volta questo codice è estratto dal seguente "programmino di
esempio":
<?PHP echo '<?xml version="1.0" encoding="UTF-8"?>'?>
<!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="it" lang="it">
<?php
class strutturaDati {
  var $dato = array();
  var $nome = array();
}
	    $tabellaDati[] = new strutturaDati();
	    $contents="";
	    $contents=file("/var/www/localhost/htdocs/testo.txt");
	    $tabellaDati[0]->dato= preg_grep("/^dato. /",$contents);
	    $tabellaDati[0]->dato[0] = preg_replace("/^dato. /","",
$tabellaDati[0]->dato[0]);
	    $tabellaDati[0]->dato = array_values($tabellaDati[0]->dato);
	    $contents="";
	    $contents=file("/var/www/localhost/htdocs/testo.txt");
	    $tabellaDati[1]->dato= preg_grep("/^dato. /",$contents);
	    $tabellaDati[1]->dato[0] = preg_replace("/^dato. /","",
$tabellaDati[1]->dato[0]);
	    $tabellaDati[1]->dato = array_values($tabellaDati[1]->dato);
?>
<head>
<title>prova</title>
</head>
<body>
<pre>
<?
$i=0;
while (isset($tabellaDati[$i]->dato[0]))
  $stringa .= $tabellaDati[$i++]->dato[0];
echo $stringa;
?>
</pre>
</body>
</html>
il file /var/www/localhost/htdocs/testo.txt ha il seguente contenuto:
$ cat /var/www/localhost/htdocs/testo.txt
dato. valore
commento. nota

 ritorni a capo.
Per togliere gli a-capi a fine stringa la funzione rtrim() e' quella che fa al
caso tuo: 
http://it2.php.net/manual/en/function.rtrim.php
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
G'Kar, everyone in this room knows too well that the first casualty
of war is always the truth.
    --Sheridan, "Acts of Sacrifice"


purtroppo, aggiungendo le seguenti righe nel php di output:
echo "stringa: ".rtrim($stringa,"\0\n\r")." ";
var_dump($stringa);
si ricava il seguente output:
stringa: valore
valore string(14) "valore
valore
"
in pratica, viene rimossa il carattere terminale della stringa $string
ma non quello intermedio che interessa a me.
non capisco neppure da dove abbia origine quel carattere. se stampo le
variabili $tabellaDati[0]->dato[0] nel momento in cui vengono create,
il termine di a capo non c'è. me lo mette proprio un demonio non so
quando e non so perché.

 quando e non so perch�.
Allora prova preg_replace('/(\n|\r)/', '', $stringa);
anche se non so se faccia proprio al caso tuo...
Astro

 Astro
alla fine ne sono uscito con str_replace.
non capisco però perché rtrim non funzi, nemmeno sulla variabile
$tabellaDati[0]->dato[0] .
(su $stringa è ovvio che non funzioni, e sbagliavo io a provarci.)

sembra che sia l'istruzione preg_grep ad aggiungere uno spazio non
voluto, come mostrerebbe il programmino qui sotto.
non mi sento però in grado di affermarlo con sicurezza, perché ho poca
esperienza per giudicare:
<?PHP echo '<?xml version="1.0" encoding="UTF-8"?>'?>
<!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="it" lang="it">
<head>
<title>prova</title>
</head>
<body>
<pre>
<?php
class strutturaDati {
  var $dato = array();
  var $nome = array();
}
	    $tabellaDati[] = new strutturaDati();
//prima lettura:
	    $contents="";
	    $contents=file("/var/www/localhost/htdocs/testo.txt");
	    //istruzione preg_grep che aggiunge un fine riga?
	    $tabellaDati[0]->dato = preg_grep("/^dato. /",$contents);
	    $tabellaDati[0]->dato = array_values($tabellaDati[0]->dato);
	    //unione delle stringhe
	    $stringa .= str_replace("\x0a","",preg_replace("/^dato. /","",
$tabellaDati[0]->dato[0]));
	    $stringa1 .= preg_replace("/^dato. /","",$tabellaDati[0]->dato
[0]);
//seconda lettura:
	    $contents="";
	    $contents=file("/var/www/localhost/htdocs/testo.txt");
	    //istruzione preg_grep che aggiunge un fine riga?
	    $tabellaDati[1]->dato = preg_grep("/^dato. /",$contents);
	    $tabellaDati[1]->dato = array_values($tabellaDati[1]->dato);
	    //unione delle stringhe
	    $stringa .= str_replace("\x0a","",preg_replace("/^dato. /","",
$tabellaDati[1]->dato[0]));
	    $stringa1 .= preg_replace("/^dato. /","",$tabellaDati[1]->dato
[0]);
?>
<?
$i=0;
/*
while (isset($tabellaDati[$i]->dato[0])) {
  $stringa .= $tabellaDati[$i++]->dato[0];
  //echo $i.$tabellaDati[$i]->dato[0];
}
*/
echo "stampa finale:";
echo "\n--\n";
echo "stringa con str_replace: \n".$stringa;
echo "\n--\n";
echo "stringa senza str_replace: \n".$stringa1;
echo "\n--\n";
?>
</pre>
</body>
</html>

 ma non quello intermedio che interessa a me.
http://it2.php.net/manual/en/function.str-replace.php
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
1-800-Flowers.com employee is fired after her e-mail account is used
to send a death threat to a critic of creationism.
Guess there was no way to say it with flowers.
    --
fark.com