Toon posts:

[Perl] Laatste gebruiker in parrent

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een flat file database die er als volgt uit ziet:
code:
1
2
3
4
5
6
1||NormalUser||Onderwerp 1|Tekst voor onderwerp 1|Datum
|1|SuperUser|Wachtwoord|Reactie 1 op onderwerp 1|Tekst voor onderwerp 1|Datum
2||NormalUser||Onderwerp 1|Tekst voor onderwerp 2|Datum
|2|NormalUser||Reactie 1 op onderwerp 2|Tekst voor onderwerp 2|Datum
|2|SuperUser|Wachtwoord|Onderwerp 2|Tekst voor onderwerp 2|datum
|2|NormalUser2||Reactie 2 op onderwerp 2|Tekst voor onderwerp 2|Datum

Kortom:
code:
1
id|parrent_id|username|password|subject|text|date

Alleen SuperUser heeft een wachtwoord om hem als dusdanig te identificeren.

Nu wil ik voor ieder onderwerp dmv een loop afzondelijk weten of SuperUser de laatste is geweest die heeft gereageerd. In bovenstaand voorbeeld is dat bijv. WEL het geval in onderwerp 1, maar niet in onderwerp 2.

  • Grum
  • Registratie: Juni 2001
  • Niet online
Ik zie het probleem niet echt ? ... gewoon in een loop alles doorlopen, bijhouden wat je als laatste per parent tegenkomt .. toch niet zo'n probleem ?

Verwijderd

Topicstarter
Hehe oops! Denkfoutje ;)

Ik ben op dit moment op school dus kan het niet testen, maar het zal dan wel iets zijn als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
open(DATA, "$cfg::datadir/data.dat.pl") || die "Failed to open: $!";
@filedata = <DATA>;
close(DATA);

foreach $line(@filedata) {
  $line =~ s/\n//isg;
  $line =~ s/\r//isg;
  if ($line =~ /^\d+\|/) {
    @line = split(/\|/, $line);
    $id = $line[0];
  } elsif ($line =~ /^\|$id\|/) {
    @line = split(/\|/, $line);
    if (($line[2] eq "SuperUser") && ($line[3] eq "Wachtwoord")) {
    $last->{$id} = true;
    } else {
    $last->{$id} = false;
    }
  } else {
    error("Database corrupt.");
}

Is dit een goede oplossing?