Oppdatere .txt fil

kongen

kongemedlem
I en .txt fil har jeg dette

HTML:
{
   "id":"1",
   "navn":"Kari Nordmann",
   "sivilstatus":"singel",
   "barn":[
      {
      "navn":"Per",
      "barnehage":"Oslo barnehage"
      },
      {
      "navn":"Pål",
      "barnehage":"Oslo barnehage"
      }]
}

Men Kari gifter seg og skviser ut enda en unge. Filen skal oppdateres til dette

HTML:
{
   "id":"1",
   "navn":"Kari Nordmann",
   "sivilstatus":"gift",
   "barn":[
      {
      "navn":"Per",
      "barnehage":"Oslo barnehage"
      },
      {
      "navn":"Pål",
      "barnehage":"Oslo barnehage"
      },
      {
      "navn":"Espen"
      }]
}

Hvordan kan jeg oppdatere sivilstatus til "gift" og slenge på en ekstra unge i .txt filen?
 

adeneo

Medlem
Du skriver ikke noe om hvilket språk, men jeg antar du fortsatt bruker PHP.

Den tekstfilen din inneholder JSON, slik at det enkleste er vel å parse JSON og så legge til ting der man ønsker, gjøre det om til string og lagre det igjen, slik

PHP:
<?php

    $file = 'person.txt';
    $arr  = json_decode( file_get_contents($file) );
    $barn = new stdClass();
    
    $barn->navn = "Espen";
    array_push($arr->barn, $barn);
    
    file_put_contents($file, json_encode($arr));

?>
 

kongen

kongemedlem
Takk :) Ja, det er php fortsatt.

Er dette den beste muligheten for å skifte sivilstatus fra singel til gift?

PHP:
str_replace('singel', 'gift', '"sivilstatus":"singel"');

Hva hvis filen har flere id, hvordan kan jeg skifte sivilstatus for bare id1?

Hva hvis lille Per snubler i dørstokken og lander på en motorsag, og derfor må fjernes fra filen, hvordan kan jeg fjerne alt om Per?

Hvis Kari jukker på seg enda en unge, en unge som har et blått øye og et brunt øye, svart hår og heter Ola, ville arrayen som legges til blitt slik da?

PHP:
$barn->navn = "Ola";
$barn->oye = "Blå";
$barn->oye = "Brun";
$barn->har = "Svart";
array_push($arr->barn, $barn);

Vil denne koden legge til dette i filen?

HTML:
{
      "navn":"Ola",
      "oye":"Blå, Brun",
      "har":"Svart",
}

Kan man bruke æ,ø,å i arraynavn?
 

kongen

kongemedlem
Slik vil jeg det skal bli, jeg glemte [] rundt øyefargene.

HTML:
{
      "navn":"Ola",
      "oye":["Blå, Brun"],
      "har":"Svart",
}
 

adeneo

Medlem
Vanligvis når man har et slikt system, så lager man en klasse som kan endre filen med ny informasjon, men det gidder ikke jeg skrive, prinsippet er akkurat det samme.

Forøvrig, når du gjør dette

PHP:
$barn->oye = "Blå"; 
$barn->oye = "Brun";

Så skriver du bare over, skal du ha flere verdier må du bruke ett array eller skrive begge to i samme string

PHP:
$barn->oye = array("Blå", "Brun");

Skal du finne en ID, og så endre noe, og du skal gjøre dette flere ganger, så lager du deg en funksjon, noe sånt som

PHP:
function change($arr, $id, $key, $value) {
    foreach($arr as $obj) {
        if ($obj->id === $id) {
            $obj->{$key} = $value;
            break;
        }
    }
}

change($arr, 1, "sivilstatus", "gift");

Skal du slette noe, så lager du en funksjon for det

PHP:
function del($arr, $name) {
    foreach($arr as $key => $obj) {
        if ($obj->navn === $navn)
            unset($arr->{$key});
    }
}

del($arr, 'Espen');
 

pmbakken

New Member
Jeg er enig med adeneo her. Det er bra praksis (norsk for best practice?) å bruke innebygde json-funksjoner. Om du lagrer slik info i tekstfiler heller enn en database, så er json genialt format. Du kan også sende det over til nettleseren for å la data behandles i javascript i klienten om det er mest praktisk. For eksempel om disse dataene skal redigeres i en form.
jQuery+json == sant :)
 

kongen

kongemedlem
Takk for svar :)

Forsøker å liste opp navn og skal skjule alle som heter "Ole". Tekstfilen skal ikke oppdateres på denne, men Ole skal skjules fra visning på websiden.

personer.txt inneholder dette:

HTML:
{
      "navn":"Per",
      "alder":"21"
}
{
      "navn":"Pål",
      "alder":"24"
}
{
      "navn":"Ole",
      "alder":"23"
}

I .php filen så har jeg dette, men det virker ikke:

PHP:
$personer = unserialize(file_get_contents('personer.txt'));

function skjul($navn) {
    foreach($personer as $person) {
        if ($person->navn === $navn) {
            unset($personer->{$person});
	}
    }
return $personer;
}

$personer = skjul('Ole');

foreach($personer as $person){
echo '<li>'.$person['navn'].' er '.$person['alder'].'</li>';
}

Jeg skal liste opp alle personer unntatt Ole, hvordan kan jeg gjøre dette?
 

adeneo

Medlem
Ehm, inneholder personer.txt serialisert kode, hvis ikke hvorfor bruker du unserialize() ?

Dataene du har er ikke gyldig ... noe som helst ?
Lagre enten som JSON eller som noe PHP gjenkjenner, først da kan du bruke en foreach loop (etter å ha brukt json_decode e.l. selvfølgelig) .

Du trenger jo egentlig ikke å loope to ganger heller, du kan bare sjekke navnet

PHP:
foreach($personer as $person){ 
    if ( $person['navn'] != 'Ole' )
        echo '<li>'.$person['navn'].' er '.$person['alder'].'</li>'; 
}
 

kongen

kongemedlem
Nå funker det, takk :)

Ja, det var serialized kode, jeg viste en enkel .txt fil for å illustrere hva som var i den.
 
Topp