Thread Datei schreiben und parallel einlesen
(11 answers)
Opened by gian at 2010-12-14 12:21
Hallo zusammen,
ich habe ein kleines Problem. Und zwar will ich gerne eine Datei einlsen die gleichzeitig von einem anderen Prozess gefüllt wird. Nun hab ich dazu ein Skript geschrieben, dass eine Datei "raw.dat" öffnet und einließt solange Zeilen forhanden sind. So weit klappt dies auch problemlos. Allerdings soll das Skript, wenn es am Ende der Datei angekommen ist warten und sobal eine neue Zeile dazu gekommen ist, diese direkt einlesen. Unten habe ich mal mein Skript angehängt + dem Skript welches eine Sonde simuliert, die später in meinem Fall auch die Datei füllt. Einleseskript Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #!/usr/bin/perl ######################################################### ## Version Test Erstellt: 14.12.2010 Verfasser: Bremm ######################################################### use DBI(); use Cwd; $file_to_read = "raw.dat"; $table = "sonde"; # Connect to the database. my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost", "root", "gian", {'RaiseError' => 1}); #oeffnet Datei if (open (SYSHANDLE,"<$file_to_read")) { print "\n\t\tEinlesen beginnt ($file_to_read).\n"; } else { print "\n\n\t\tFehler: konnte \"$file_to_read\" nicht oeffnen... :-(\n"; exit; } $dbh->do("DROP TABLE $table"); $dbh->do("CREATE TABLE $table (id VARCHAR(50))"); #liest Datei zeilenweise ein. Solange wie Zeilen vorhanden sind while (<SYSHANDLE>) { $dbh->do("INSERT INTO $table VALUES (". $dbh->quote($_) .")"); } printf ("\t\tZeilen eingelsesen und Datei geschlossen\n"); Schribskript Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/usr/bin/perl ######################################################### ## Version Test Erstellt: 14.12.2010 Verfasser: Bremm ######################################################### use Cwd; use IO::Handle; $file_to_write = "raw.dat"; if (open (SYSHANDLE,">$file_to_write")) { print "\n\t\tSchreiben beginnt ($file_to_write).\n"; } else { print "\n\n\t\tFehler: konnte \"$file_to_write\" nicht oeffnen... :-(\n"; exit; } SYSHANDLE->autoflush(1); for(my $i = 1; $i <= 100; $i++) { print SYSHANDLE "$i\n"; sleep(1); } close(SYSHANDLE); Ich hatte überlegt ob man irgendwas in die Richtung mit EOF anstellen kann. Ich weiß aber nicht, ob und wann genau der Schreibprozess ein EOF setzt. Danke schonmal im Voraus für jede Hilfe Gruß Gian Last edited: 2010-12-14 12:37:32 +0100 (CET) |