Tak Peder
Det var det jeg frygtede jeg skulle ud i, men Ok. Jeg prøver at teste på
diverse dos-filer jeg har. Jeg hælder til denne metode i forhold til 'file',
da den er lidt forskellige afhængig af Unix-type.
/Tom Frank
"Peder Skyt, Z=nospam" <pesky@pc.dkZ> wrote in message
news
b1ku00gjmf36h9o0lassc3j5bp1h573f@4ax.com...
> On Thu, 25 Jul 2002 10:03:29 +0200, "Tom Frank" <tofran@hotmail.com>
> wrote:
>
> >et program [..] til at identificere dos ascii filer
>
> Det er ikke muligt (sikkert) at gøre det fuldtud automatisk.
>
> Se om mit nedenstående script ikke kan bruges til noget - det var en
> morsom lille 2-timers opgave
>
> /Peder Skyt
>
>
> #!/bin/perl -w
> # Slamkode som identificerer potentielle DOS-tekstfiler.
> # Bemærk: Der ses kun på CR/LF; f.eks. stoppes IKKE ved ^Z
> #
> # Ét argument: Navn på fil som ønskes testet
> #
> # Resultat: En linie (på stdout), som starter med B/A (binær/ascii)
> # Der returneres succes såfremt det lykkedes at teste filen.
>
> use strict;
> use warnings;
> use English;
>
> my $WAY_TOO_BIG = 10_000_000;
> my $buflen;
> my $buffer;
> my $type = 'X'; # default
>
> defined $ARGV[0] or die "Angiv filnavn som argument!\n";
>
> my $filename = $ARGV[0];
>
> -e $filename or die "$filename: findes ikke\n";
> -f $filename or die "$filename: er ikke en normal fil\n";
>
> open INFILE, '<'.$filename
> or die "$filename: $!\n";
>
> binmode INFILE
> or die;
>
> $buflen = read( INFILE, $buffer, $WAY_TOO_BIG );
> die if !defined( $buflen );
>
> if ( $buflen == $WAY_TOO_BIG ) {
> $type = 'B - filen er alt for stor til at være tekst';
> }
> elsif ( $buflen == 0 ) {
> $type = 'B - filen er tom';
> }
> elsif ( $buffer =~ /\A[^\cM\cJ]*(?:\cM\cJ[^\cM\cJ]*)+\Z/s ) {
> #
> # DOS-ASCII:
> # Optionalt nogle non-CR/LF tegn
> # Efterfulgt af et antal af:
> # CRLF
> # Optionalt efterfulgt af non-CR/LF tegn
> #
> $type = 'A';
> }
> else {
> # Binære filer, og almindelige (Unix-)tekstfiler
> $type = 'B';
> }
>
> close INFILE;
>
> print $type;
> 1;
>