Avatar billede huulbaek_at_home Nybegynder
11. juni 2001 - 14:57 Der er 11 kommentarer og
1 løsning

CSV Database

Jeg skal have lavet en validering på en indtastning af et kontonummer; dvs. om det eksisterer eller ej. Jeg har alle dataene liggende i en ;-separeret fil (måske bare en fil hvor kun kontonumrene står i én kolonne hvis det er nemmere). Hvis nummeret eksisterer er alt bare OK! og hvis ikke skal dette selvfølgelig meddeles.

Er det noget der er nemt at lave? Og - i så fald - hvordan?

Hilsner,
Thomas
Avatar billede ehf Nybegynder
12. juni 2001 - 13:36 #1
Kan du ikke bare åbne filen og så læse gennem
til du finder nummeret eller kommer til EOF.

open(PASS,\"< $kontofil\") || die \"can\'t open out\";

while (<PASS>) {
    print $_;
}
Avatar billede huulbaek_at_home Nybegynder
13. juni 2001 - 13:16 #2
Takker... Men nu forstår jeg ikke så meget PERL.. kan du forklare nærmere hvad script-bidden gør??

Avatar billede ehf Nybegynder
13. juni 2001 - 13:29 #3
Første linie åbner en fil og giver dig et handle.

While løkken læser gennem filen og printer hver linie.

I stedet for dette print kunne du sammenligne med det kontonummer du skal have valideret. Hvis du når EOF uden at finde en match så er det ikke valid. Vær opmærksom på at $_ indeholder et linie skift som du evt skal choppe af.
Avatar billede huulbaek_at_home Nybegynder
13. juni 2001 - 14:05 #4
Ok... Så hvis min fil ser sådan her ud:

\"23984732947\"
\"23487234874\"

osv osv.

så skulle følgende virke? Eller hvad? ;)

  $kontonummer = 0;
  open(PASS,\"< $kontofil\") || die \"can\'t open out\";
  while (<PASS>)
  {
        if ($_ = \"$billing_customer_id\")
      {
        $kontonummer = 1;
      }
  }
  if ($kontonummer = 0)
  {
        $missing_fields .= \"<LI>\" . \"Kontonummeret er ugyldigt.
  }
Avatar billede ehf Nybegynder
13. juni 2001 - 14:11 #5
Når din fil ser sådan ud vil $_ i while løkken få værdierne
\"23984732948\"
\"23487234874\"
Avatar billede huulbaek_at_home Nybegynder
14. juni 2001 - 12:13 #6
Hejsa...

Der er en eller anden syntax fejl i open... kommandoen.. Er du sikker på, at den skal se sådan ud???

Thomas

Avatar billede ehf Nybegynder
14. juni 2001 - 12:17 #7
Har du assignet $kontofil?
Hvad siger fejlen?

my $kontofil = \"filnavn.csv\";
open (PASS, \"< $kontofil\") || die \"can\'t open \";
Avatar billede huulbaek_at_home Nybegynder
14. juni 2001 - 12:24 #8
Ja, den er assignet. Jeg kan desværre IKKE se fejlen, da jeg bare kører den på en server hvor jeg ikke har shell adgang.. Så måske er det lidt svært...

Avatar billede ehf Nybegynder
14. juni 2001 - 12:30 #9
Prøv på en server hvor du har shell adgang.
Avatar billede huulbaek_at_home Nybegynder
14. juni 2001 - 13:35 #10
OK - nu kommer der ingen fejl.. men, scriptet \"synes\" at alle kontonumre er ok! Det ser sådan ud:

$kontofil = \"DEBKART.TXT\";
$kontonummer = \"0\";

print $kontonummer;

open (PASS, \"< $kontofil\") || die \"can\'t open \";
while (<PASS>)
{
  if ($_ = 6544481)
  {
    $kontonummer = 1;
  }
}
  if ($kontonummer = 0)
  {
            print \"Det eksisterer ikke!\";
  }
  if ($kontonummer = 1)
  {
          print $kontonummer;
        print \"Det er rigtigt nok!\";
  }

Hvorfor bliver if ($_ = 6544481) altid sand??

Avatar billede ehf Nybegynder
14. juni 2001 - 15:20 #11
Det er fordi $_ = 6544481;
er en assignment ikke en sammenligning.
Du skal gøre følgende
while (<PASS>)
{
    my $x = $_;
    chop($x);
    if ($x eq 6544481)
    {
          $kontonummer = 1;
    }
}

Hvor chop fjerner sidste karakter fra $x (linie skift)
og eq bruges ved streng sammenligning (numerisk er det ==)
Avatar billede huulbaek_at_home Nybegynder
14. juni 2001 - 15:24 #12
takker! ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester