FAQ
Hola a todos.

Estoy atascado con esto, que no comprendo el porque ocurre.

Es un poco largo de explicar, siento la molestia.

Tengo la siguiente clase:

class ficheros {

protected $files= array('prueba_copia.po');
protected $dirPath= '../traduc';
protected $fp= array();
public $arr_contenido= array();


private function abrir(){
foreach($this->files as $file){
$pathFile= $this->dirPath.'/'.$file;

$this->fp[]= fopen($pathFile, 'r');

}
return;
}

//Devuelve un array con indice de línea.
public function leer(){
if(empty ($this->fp)){
$this->abrir();
}

foreach($this->fp as $open){
$numLinea= 0;

while (!feof($open)){
if($contenido= fgets($open)){
$this->arr_contenido[$numLinea]=$contenido;
$numLinea++;
}
}

fclose($open);
}
return $this->arr_contenido;
}

Lo llamo desde otro archivo y compruebo que muestra con print_r.

require_once 'ficheros.class.php';

$fich= new ficheros();
$fich->leer();

print_r($fich);

El resultado es este:
ficheros Object
(
[files:protected] => Array
(
[0] => prueba_copia.po
)

[dirPath:protected] => ../traduc
[fp:protected] => Array
(
[0] => Resource id #6
)

[arr_contenido] => Array
(
[0] => msgstr "O <strong> linea 1 nome do
parcheesi<strong> vem da palabra <em>pacis/em>, que significa vinte e
cinco <strong>em hindu já</strong> que vinte e cinco eram as conchas
lançadas em cada série."

[1] => msgstr " Linea 2 Contatta col nostro <a
href='%URL'>servizio all'utente>, indicando i passi che hai fatto fino
ad arrivare qui."

......
)

[contFich] =>
)

Por otro lado tengo esta otra clase:

class limpiar {

public $trimFile= array();

public function LimpEspInfin($files){

foreach($files as $key=>$file){
$this->trimFile[]= trim(preg_replace('/\s\s+/', ' ' ,$file));
}
return;

}

}

Si modifico el archivo donde las llamo:
require_once 'ficheros.class.php';
require_once 'limpiar.class.php';

$fich= new ficheros();

//Quitar espacios al principio y final y tabuladores.
$limpEsp= new limpiar();
$limpEsp->LimpEspInfin($fich->leer());
print_r($limpEsp);

El resultado:

limpiar Object
(
[trimFile] => Array
(
[0] => msgstr "O <strong> linea 1 nome do
parcheesi<strong> vem da palabra <em>pacis/em>, que significa vinte e
cinco <strong>em hindu já</strong> que vinte e cinco eram as conchas
lançadas em cada série."
[1] => msgstr " Linea 2 Contatta col nostro <a
href='%URL'>servizio all'utente>, indicando i passi che hai fatto fino
ad arrivare qui."
......
)

)

Hasta aquí todo bien, pero el problema es el siguiente:

Añado un método "modificarFich" en la clase ficheros, dejándolo así.

class ficheros {

protected $files= array('prueba_copia.po');
protected $dirPath= '../traduc';
protected $fp= array();
public $arr_contenido= array();
public $contFich;


private function abrir(){
foreach($this->files as $file){
$pathFile= $this->dirPath.'/'.$file;

$this->fp[]= fopen($pathFile, 'r');

}
return;
}

//Devuelve un array con indice de línea.
public function leer(){
if(empty ($this->fp)){
$this->abrir();
}

foreach($this->fp as $open){
$numLinea= 0;

while (!feof($open)){
if($contenido= fgets($open)){
$this->arr_contenido[$numLinea]=$contenido;
$numLinea++;
}
}

fclose($open);
}
return $this->arr_contenido;
}

/**
* Modificar contenido del fichero.
*/
public function modificarFich($contenido){

foreach($contenido as $cont){
$this->contFich.= $cont;
}
}
}

Lo añado al archivo donde llamo a todos lo métodos:
require_once 'ficheros.class.php';
require_once 'limpiar.class.php';

$fich= new ficheros();

//Quitar espacios al principio y final y tabuladores.
$limpEsp= new limpiar();
$limpEsp->LimpEspInfin($fich->leer());
//
////Meter modificaciones en archivos.
$modifFich= new ficheros();
$modifFich->modificarFich($limpEsp);
//
print_r($modifFich);

Y el resultado:

ficheros Object
(
[files:protected] => Array
(
[0] => prueba_copia.po
)

[dirPath:protected] => ../traduc
[fp:protected] => Array
(
)

[arr_contenido] => Array
(
)

[contFich] => Array <===== ESTO ES LO QUE FALLA.
)

No entiendo el porqué me lo devuelve como un array y no como un string.

¿Alguien sabría decirme que está fallando?.

Gracias por vuestra paciencia y ayuda.
--
--
Saludos cordiales.
Pablo.

Si lo reenvías, ten la precaución de borrar los datos de procedencia que
encabezarían tu reenvío – empezando por mi dirección de correo
electrónico - . Coloca siempre las direcciones de tus contactos en el
campo <CCO> para que viajen discretas, no en el campo <Para> ni en
el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
de los demás destinatarios a los que también se remite. Todo ello a fin
de evitar que nadie se aproveche de todas las direcciones que se van
acumulando al pasar de buzón a buzón para el lanzamiento de correo
basura y otras indeseadas lindezas. Aparte claro está de garantizar la
privacidad.

Search Discussions

  • Ariel Camino at May 23, 2011 at 11:38 am
    Es el mismo error teórico que te marcaron antes, lo estás cometiendo
    una y otra vez:

    Esto:

    $fich->leer();

    Retorna un array y no lo estás almacenando en ningún lado, cuando
    haces un print_r($fich) lo que estás imprimiendo es el objeto, no el
    array, tenes que entender la diferencia:

    print_r($fich); es un objeto
    print_r($fich->leer()); es un array

    Finalmente yendo al problema puntual, cuando haces esto:

    $modifFich->modificarFich($limpEsp);

    Le estás mandando $limpEsp, y $limpEsp es un objeto, no es un array.

    Saludos,
    --
    Ariel Camino
  • Pablo Braulio at May 23, 2011 at 11:48 am
    Hola Ariel.

    Gracias por la ayuda.

    Creo que ha quedado claro que me falta un poco de destreza con POO. :-|

    Entiendo a lo que te refieres, pero mi problema es que no se como recogerlo.

    Es decir, el método "LimpEspInfin" recoge unos valores "originales" y
    los modifica. Lo que pretendo es que el método "modificarfich", recoja
    dichos valores modificados y los procese.

    ¿Como podría hacer eso?. Con esto no funciona:

    require_once 'ficheros.class.php';
    require_once 'limpiar.class.php';

    $fich= new ficheros();

    //Quitar espacios al principio y final y tabuladores.
    $limpEsp= new limpiar();
    $lim= $limpEsp->LimpEspInfin($fich->leer());

    ////Meter modificaciones en archivos.
    $modifFich= new ficheros();
    $modifFich->modificarFich($lim);

    El día 23 de mayo de 2011 13:38, Ariel Camino <arielcamino@gmail.com> escribió:
    Es el mismo error teórico que te marcaron antes, lo estás cometiendo
    una y otra vez:

    Esto:

    $fich->leer();

    Retorna un array y no lo estás almacenando en ningún lado, cuando
    haces un print_r($fich) lo que estás imprimiendo es el objeto, no el
    array, tenes que entender la diferencia:

    print_r($fich); es un objeto
    print_r($fich->leer()); es un array

    Finalmente yendo al problema puntual, cuando haces esto:

    $modifFich->modificarFich($limpEsp);

    Le estás mandando $limpEsp, y $limpEsp es un objeto, no es un array.

    Saludos,
    --
    Ariel Camino


    --
    --
    Saludos cordiales.
    Pablo.

    Si lo reenvías, ten la precaución de borrar los datos de procedencia que
    encabezarían tu reenvío – empezando por mi dirección de correo
    electrónico - . Coloca siempre las direcciones de tus contactos en el
    campo <CCO> para que viajen discretas, no en el campo <Para> ni en
    el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
    de los demás destinatarios a los que también se remite. Todo ello a fin
    de evitar que nadie se aproveche de todas las direcciones que se van
    acumulando al pasar de buzón a buzón para el lanzamiento de correo
    basura y otras indeseadas lindezas. Aparte claro está de garantizar la
    privacidad.
  • Pablo Braulio at May 23, 2011 at 1:27 pm

    ¿Por qué no funciona? Fijate que el $contenido que recibís en el
    método modificarFich sea efectivamente un array con la forma que
    necesitas.

    Saludos!
    --
    No recoge nada de ese modo.

    Mira. Si pongo esto:

    require_once 'ficheros.class.php';
    require_once 'limpiar.class.php';

    $fich= new ficheros();
    $fich->leer();

    print_r($fich);

    Recojo todo el objeto.

    ficheros Object
    (
    [files:protected] => Array
    (
    [0] => prueba_copia.po
    )

    [dirPath:protected] => ../traduc
    [fp:protected] => Array
    (
    [0] => Resource id #7
    )

    [arr_contenido] => Array
    (
    [0] => msgstr "O <strong> linea 1 nome do
    parcheesi<strong> vem da palabra <em>pacis/em>, que significa vinte e
    cinco <strong>em hindu já</strong> que vinte e cinco eram as conchas
    lançadas em cada série."

    [1] => msgstr " Linea 2 Contatta col nostro <a
    href='%URL'>servizio all'utente>, indicando i passi che hai fatto fino
    ad arrivare qui."

    [2] => msgstr " Linea 3 Le joueur qui se réengage le fait
    <strong> avec le même nombre"

    ....

    )

    )

    Si hago:

    require_once 'ficheros.class.php';
    require_once 'limpiar.class.php';

    $fich= new ficheros();
    $fich->leer();

    print_r($fich->leer());

    Sale el siguiente error:

    PHP Warning: feof(): 7 is not a valid stream resource in
    /home/../Traduccion/checkTraduccion/ficheros.class.php on line 40
    PHP Warning: fgets(): 7 is not a valid stream resource in
    /home/../Traduccion/checkTraduccion/ficheros.class.php on line 41

    Siento ser tan pesado, pero es que estoy atascado con esto.

    Muchas gracias por todo.
    --
    --
    Saludos cordiales.
    Pablo.

    Si lo reenvías, ten la precaución de borrar los datos de procedencia que
    encabezarían tu reenvío – empezando por mi dirección de correo
    electrónico - . Coloca siempre las direcciones de tus contactos en el
    campo <CCO> para que viajen discretas, no en el campo <Para> ni en
    el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
    de los demás destinatarios a los que también se remite. Todo ello a fin
    de evitar que nadie se aproveche de todas las direcciones que se van
    acumulando al pasar de buzón a buzón para el lanzamiento de correo
    basura y otras indeseadas lindezas. Aparte claro está de garantizar la
    privacidad.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedMay 23, '11 at 11:25a
activeMay 23, '11 at 1:27p
posts4
users2
websitephp.net

2 users in discussion

Pablo Braulio: 3 posts Ariel Camino: 1 post

People

Translate

site design / logo © 2022 Grokbase