Exercice 10.5: modifier un renseignement Terminé

Consigne

Ecrivez un algorithme qui permette de modifier un renseignement (pour simplifier, disons uniquement le nom de famille) d’un membre du carnet d’adresses. Il faut donc demander à l’utilisateur quel est le nom à modifier, puis quel est le nouveau nom, et mettre à jour le fichier. Si le nom recherché n'existe pas, le programme devra le signaler.

Afficher le fichier du carnet d'adresses

Pseudo code

DEBUT
    FONCTION formatData(data, length = 20)
        RENVOYER strtolower( str_pad( data, length ) )
    FIN DE FONCTION

    ECRIRE "Entrez le nom à modifier"
    LIRE nameToEdit

    ECIRE "Entrez le nouveau nom"
    LIRE newName

    OUVRIR "address.txt" sur 1 en LECTURE

    i = 0
    users = []
    userFound = FALSE

    TANT QUE non EOF, 1
        line = LIRE 1

        SI ( substr(line, 0, 20) == formatData(nameToEdit) ) ALORS
            userFound = TRUE
            line = str_replace( formatData(nameToEdit), formatData(newName), line )
        FIN SI

        users[i] = line
        i++
    FIN TANT QUE

    FERMER FICHIER 1

    SI (userFound) ALORS
        OUVRIR "address.txt" sur 1 en ECRITURE

        POUR CHAQUE users EN user
            ECRIRE 1, user
        FIN POUR

        FERMER FICHIER 1

        ECRIRE "Le carnet d'adresse à été changé"
    SINON
        ECRIRE "Aucun nom correspondant dans le carnet d'adresse."
    FIN SI
FIN

Réponse

Attention:
Il semblerai que le résultat du code ne s'affiche pas avec CHROME.
Il fonctionne avec MOZILLA FIREFOX.

Conversion

Pas de code Javascript présent pour cet exercice
Pas de code Jquery présent pour cet exercice
<?php

/**
 * @var String $filePath Path of address.txt file
 */
$filePath = "scripts/174/address.txt";

/**
 * Format Data
 * String should always have the same length and should be in lower case.
 * @param $data The string to format.
 * @param $length [Optional] Length string should be.
 * @return String The formated string.
 */
function formatData(String $data, $length = 20):String {
    return strtolower( str_pad($data, $length) );
}

$nameToEdit = formatData($_POST['nameToEdit']);

// Open file in writing mode, cursor at the end of file.
$fStream = fopen($filePath, "r");

if ($fStream) {

    $i = 0;
    $users = [];
    $userFound = FALSE;

    while (!feof($fStream)) {
        $line = fgets($fStream);

        if (substr($line, 0, 20) == formatData($nameToEdit)) {
            $userFound = TRUE;
            $line = str_replace(formatData($nameToEdit), formatData($_POST['newName']), $line);
        }

        $users[$i] = $line;

        $i++;
    }

    fclose($fStream);

    if ($userFound) {

        $fStream = fopen($filePath, "w");

        foreach ($users as $user) {
            fwrite($fStream, $user);
        }

        fclose($fStream);

        echo "Le carnet d'adresse à été changé";
    } else {
        echo "Aucun nom correspondant dans le carnet d'adresse.";
    }
}

Choisissez un language:

Entrez les valeurs nécessaires:

Résultat du code

Le résultat s'affichera après l'exécution du code.