Avatar billede kelo Nybegynder
26. juli 2001 - 08:21 Der er 9 kommentarer og
1 løsning

Filer og EOF!

Jeg har et tekstdokument hvor i jeg skal putte enkeltvis data iden og lukke den igen. Men der må højst være 500 linier i filen, hvorefter den skal oprette en ny fil. Hvad hedder den test forspørgsel?

(filnavn->eof < 499) ??? noget ca sådan.
Avatar billede mahler Nybegynder
26. juli 2001 - 08:48 #1
Der er mange måder at gøre det på. Jeg ville foreslå noget i stil med følgende. Først en opskærning af data i de dele, der skal i de forskellige filer, og efterfølgende skrivning til filerne.

Det antages at indholdet til filerne ligger i @datalines.

(Bemærk: koden er ikke testet, så der skal sikkers rettes lidt til).
--
my @datalines; # <- indeholder linjerne til filerne...
my $maxlinesprfile = 499;
my $count = 0;

my @fileContent;
my @toFile;

while (@datalines) {
        push @toFile, $_
        $count++

        if ($count == $maxlinesprfile) {
                $count = 0;
                push @fileContent, \\@toFile;

                @toFile = ();
        }
}

my $filename=\'data.\';
$count=0;
foreach $filedata (@fileContent) {
        open OUTFILE, \"$filename$count\";
        foreach (@$filedata) { print OUTFILE $_ }
        close OUTFILE;
        $count++
}
Avatar billede kelo Nybegynder
26. juli 2001 - 08:56 #2
Pyha det var en hård en, sådan har jeg ikke gjort, næsten ikke =))

Det jeg var ude efter var hvordan man tester på linierne i en fil, men eller tak for dit fine kode, må man gå så vidt og kalde dig Karl Koder???
Avatar billede mahler Nybegynder
26. juli 2001 - 09:04 #3
Så skal du vel bare starte med et hælde hele filens indhold ind...

my @datalines;
open DATA, \'indfile\';
while (<DATA>) { push @datalines, $_;
close DATA;

for derefter at bruge ovenstående kode?

Hvis det du vil opnå er maks at læse 500 linjer fra filen, så skal du nok lave noget i stil med

my @data;
my $count =0;
open FILE, \'inddata\';
while (<FILE> && $count < $maxlinesprfile) {
  push @data, $_;
  $count++;
}
close FILE;
Avatar billede kelo Nybegynder
26. juli 2001 - 09:38 #4
Takker! Det var lige hvad jeg søgte ;oP
Avatar billede kelo Nybegynder
26. juli 2001 - 10:03 #5
Hmm den tester ikke ordenligt, den tæller bare op til 500 uden at kontrollere linierne
Avatar billede mahler Nybegynder
26. juli 2001 - 10:07 #6
Ret i while linjen så && bliver til ||

Det er naturligvis ikke en \"og\", men en \"eller\" betingelse, der skal ind.
Avatar billede kelo Nybegynder
26. juli 2001 - 10:11 #7
Nope bliver ved til uendelighed.

Kan man ikke gøre dette?

while ( fil || $taeller <= 499 || fil->EOF )


P.s i de bøger jeg har, står der ikke en skid og test på EOF i filer, skod.
Avatar billede kelo Nybegynder
26. juli 2001 - 10:17 #8
Har oprettet et nyt spørgsmål!  Er det ikke det rigtig at gøre når jeg har accepteret dit svar?
Avatar billede mahler Nybegynder
26. juli 2001 - 10:19 #9
Normalt burde <FILE> returnere false når de fil ikke er længere.

Jeg prøvede lige at lave følgende script:
--

#!/usr/bin/perl -w
use strict;

my @data;
my $maxlines = 100;
my $count =0;
open FILE, \'test.data\';
while (<FILE> && $count < $maxlines) {
  push @data, $_;
  $count++;
}
close FILE;

print \"Read $count lines\\n\";

exit();
--
I filen \"test.data\" havde jeg 2000 linjer, og hvis jeg prøver at justere $maxlines til 2000+ linjer læser den kun 2000, og sætter jeg den mindre, læser den mindre.
Avatar billede kelo Nybegynder
26. juli 2001 - 10:23 #10
Hmmmm skummel, jeps dit script virker.....jeg lukker den anden igen, så må jeg hellere rode lidt mere med det.

Måske druesukker kan gøre nogle underværker *S*

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