Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Dimitar Stefanov en 11 de Mayo 2016, 17:15

Título: Leer escribir archivos de texto, fopen, fgets, fputs, fclose, feof PHP CU00836B
Publicado por: Dimitar Stefanov en 11 de Mayo 2016, 17:15
Buenas tardes. Aquí dejo una posible solución del ejercicio CU00836B del curso PHP desde cero.

Citar
EJERCICIO

Crea las siguientes funciones en PHP:

a) Una función (tipo procedimiento, no hay valor devuelto) denominada escribirTresNumeros que reciba tres números enteros como parámetros y proceda a escribir dichos números en tres líneas en un archivo denominado datosEjercicio.txt. Si el archivo no existe, debe crearlo.

Código: [Seleccionar]
<?php 

function escribirTresNumeros($a$b$c){

$fp fopen("datosEjercicio.txt""w");
fputs($fp$a."\n".$b."\n".$c);
fclose($fp);

}

escribirTresNumeros(246);

?>

Citar
b) Una función denominada obtenerSuma (tipo función, devolverá un valor numérico) que reciba una ruta de archivo como parámetro, lea los números existentes en cada línea del archivo, y devuelva la suma de todos esos números.

Código: [Seleccionar]
<?php 

function 
obtenerSuma(){

$fp fopen("datosEjercicio.txt""r");
$contador 0;
$resultado 0
$valor = array();
while(!feof($fp)){
$linea fgets($fp);
$valor[$contador] = $linea;
echo "La línea ".($contador+1)." vale = ".$valor[$contador]."<br>";
$resultado $resultado $valor[$contador];
$contador += 1;
}
fclose($fp);
return $resultado;

}

echo "La suma de las tres líneas es: ".obtenerSuma();

?>

Citar
c) Una función denominada obtenerArrNum (tipo función, devolverá un array de valores numéricos) que reciba una ruta de archivo como parámetro, lea los números existentes en cada línea del archivo, y devuelva un array cuyo índice 0 contendrá el número existente en la primera línea, cuyo índice 1 contendrá el número existente en la segunda línea y así sucesivamente.

Código: [Seleccionar]
<?php 

function 
obtenerArrNum($archivo){

$fp fopen($archivo"r");
$valor;
$contador 0;

while(!feof($fp)){
$linea fgets($fp);
$valor[$contador] = $linea;
$contador += 1;
}

fclose($fp);

return $valor;

}

foreach (obtenerArrNum("datosEjercicio.txt") as $indice => $valor) {
echo "El índice ".$indice." contiene: ".$valor."<br>";
}

?>

Citar
d) Crea código php donde a través de la función escribirTresNumeros escribas en el fichero los números 2, 8, 14. Luego, mediante la función obtenerSuma muestra por pantalla el resultado de sumar los números existentes en el archivo. Finalmente, mediante la función obtenerArrNum obtén el array, recórrelo y muestra cada uno de los elementos del array.

Código: [Seleccionar]
<?php 

function 
escribirTresNumeros($a$b$c){

$fp fopen("datosEjercicio.txt""w");
fputs($fp$a."\n".$b."\n".$c);
fclose($fp);

}

escribirTresNumeros(246);


function obtenerSuma(){

$fp fopen("datosEjercicio.txt""r");
$contador 0;
$resultado 0
$valor = array();
while(!feof($fp)){
$linea fgets($fp);
$valor[$contador] = $linea;
echo "La línea ".($contador+1)." vale = ".$valor[$contador]."<br>";
$resultado $resultado $valor[$contador];
$contador += 1;
}
fclose($fp);
return $resultado;

}

echo "La suma de las tres líneas es: ".obtenerSuma()."<br>";

echo "<br><br><br>";

function obtenerArrNum($archivo){

$fp fopen($archivo"r");
$valor;
$contador 0;

while(!feof($fp)){
$linea fgets($fp);
$valor[$contador] = $linea;
$contador += 1;
}

fclose($fp);

return $valor;

}

foreach (obtenerArrNum("datosEjercicio.txt") as $indice => $valor) {
echo "El índice ".$indice." contiene: ".$valor."<br>";
}

?>

Gracias.
Título: Re:CU00836B Leer y escribir archivos de texto con PHP
Publicado por: pedro,, en 13 de Mayo 2016, 00:29
Hola dimiste.


Lo primero decirte que el ejercicio cumple con lo que pedía el enunciado, solo comentar algunos detalles a mejorar.

Según el enunciado cuando invoquemos la función obtenerSuma había que pasar como parámetro la ruta del archivo, cosa que se te pasó por alto.
En esta función podríamos omitir la variable $valor, puesto que no le vamos a dar ningún uso a los valores que se almacenan en ella. El bucle while podría quedar así:
Código: [Seleccionar]
while(!feof($fp)){
$linea = fgets($fp);
echo "La línea ".(++$contador)." vale = ".$linea."<br>";
$resultado = $resultado + $linea;
}
Y el bucle de la función obtenerArrNum, también se podría abreviar un poco:
Código: [Seleccionar]
while(!feof($fp)){
$valor[$contador++] = fgets($fp);
}

Son detalles que con el tiempo irás perfeccionando.
Enhorabuena por el ejercicio.

Saludos. ;D
Título: Re:CU00836B Leer y escribir archivos de texto, fopen, fgets, fputs, fclose,feof PHP
Publicado por: Dimitar Stefanov en 13 de Mayo 2016, 10:58
Buenos días, Pedro.

Gracias por el tiempo dedicado y por corregirme el ejercicio. Y también gracias por decirme esos pequeños detalles, porque pueden parecer pequeños, pero es lo que dices tú, sólo así podré aprender más y perfeccionarme.

Sobre los bucles que me has propuesto, tienes toda la razón, no hace falta que utilice un array (nunca sé si es "una" array o "un" array, jejeje), puesto que la variable $linea cambia de valor en cada pasada del bucle.

Referente a pasarle un enlace como parámetro de la función obtenerSuma(), procedo a la oportuna corrección:



Código: [Seleccionar]
<?php 

function 
obtenerSuma($archivo){

$fp fopen($archivo"r");
$contador 0;
$resultado 0
while(!feof($fp)){
$linea fgets($fp);
echo "La línea ".(++$contador)." vale = ".$linea."<br>";
$resultado $resultado $linea;
}
fclose($fp);
return $resultado;

}

$archivo "datosEjercicio.txt";
echo "La suma de las tres líneas es: ".obtenerSuma($archivo);

?>

Gracias.