[vienna.pm] Datei lesen

Peter Seitz seitz at bzs.tu-graz.ac.at
Sun Feb 4 07:58:53 CST 2001


* * * vienna-pm-list * * *


Hallo Freunde,

ich habe aehm, tja... ein kleines Windows Problem...

Ich habe unter DOS ein perl Programm geschrieben, welches einen
Mailfolder einliest und die Einzelmails ausliest. Die Einzelmails
sind mit \x1A voneinander getrennt.

Unter DOS 6.2 laeuft das alles auch hervorragend.

Nun habe ich das Programm und den Mailfolder auf meinen Win98 SE
Rechner kopiert und habe das mittels ActiveState Perl (5.6.0 Build 620)
ausfuehren wollen, doch in dem Mailfolder mit 190 Mails findet
das Programm nun nur noch die erste Mail.

Hier das gekuerzte Programm:

#!/usr/bin/perl -w
use English;    # In order to read one e-mail message as one record
use Carp;
use strict;
                                # digest seperation character
my $message_boundary = '----------------Message-boundary';
my $message_seperator = "\x1A";    # mail seperator chr(26)

my $ors = $RS;     # remember old record seperator (EOL)
$RS = $ors . $message_seperator;   # new 'eol'-value

my $mime_seperator = $ors . $message_boundary;

my $mailfolder= "wpm-b-01.pmm";  # spaeter mal durch Benutzereingabe

open(MAILF, $mailfolder)|| die "Can't Open Mailfolder $mailfolder: $!\n";

# skip the first 128 bytes at the begining of each mail folder
read(MAILF,my $header,128);
print "'$header'\n";

my $number = 0; # for generating the filename
my $filename = "";      # filename for storing the extracted e-mail message

while (<MAILF>) {
  chomp;        # remove mail seperator character
  if ($_ =~ m/$message_boundary/) {
    print "D";
    my @mailmessages = split(/$mime_seperator/, $_);
    my $dummy = shift(@mailmessages);
    if ($mailmessages[$#mailmessages] eq "--") {
      $dummy = pop(@mailmessages);
    }
    foreach (@mailmessages) {
      $filename = sprintf("x%06d.cnm", $number);
      $number = $number+1;
      print ".";                # we've written a single message
      s/^\s*//;                 # remove empty line(s) at the beginning of a message
      # Message schreiben
    }  # foreach (@mailmessages)
  }
  else {
    # we have a normal message found here
    $filename = sprintf("x%06d.cnm", $number);
    ++$number;
    print "M";          # we've written an single mail message (unconverted)
    # Message schreiben
  }
}  # while (<MAILF>)

print "\nAll work done...\n";



Ich bin nun etwas ratlos, wie ich rausbekommen soll, wo das Problem
liegt. Offensichtlich ist die Zeilenende-Problematik hier das
Problem, doch ich dachte unter DOS und Windows ist hier kein
Unterschied.

Wer kann mir Tips geben, wie ich das problem einkreisen kann.

Mittlerweile hab ich es unter Linux getestet und da funktioniert
auch alles praechtig.

With best compliments

           Peter Seitz
--

  Technische Universitaet Graz, Austria  - Fak. f. Bauingenieurwesen
  mailto:seitz at bzs.tu-graz.ac.at - http://wwwbzs.tu-graz.ac.at/~seitz/

              Mitglied der Pegasus Mail Supportgruppe
        Koordinator des Pegasus Mail Uebersetzungsprozesses

Die (In)Offizielle deutschsprachige Support Seite fuer Pegasus Mail:
Original: http://wwwbzs.tu-graz.ac.at/software/pegasus/
Mirror:   http://ftp.uni-mannheim.de/mirror/pmail/


###
You are subscribed to vienna-pm-list as "Peter Seitz" <seitz at bzs.tu-graz.ac.at>
http://www.fff.at/fff/vienna.pm/



More information about the Vienna-pm mailing list