Zur Zeit wird gefiltert nach: perl
Filter zurücksetzen

18.03.2010
 | Autor: Maximilian Kalus | Abgelegt in:  | Kommentare: 0

LCD-Newsticker für RSS mit Perl

In meinem letzten Beitrag habe ich ein LCD/LED-Gerät gebastelt. In diesem Artikel geht es um einen möglichen Anwendungsfall: Das Lesen von RSS-Feeds und deren Anzeige auf dem LCD-Bildschirm.
[mehr]
16.03.2010
 | Autor: Maximilian Kalus | Abgelegt in:  | Kommentare: 2

Sparkfun Serial Enabled LCD-Anzeige per Perl über FTDI ansprechen (Linux/Ubuntu)

Sparkfun bietet verschiedene LCDs, welche einen UART-Anschluss besitzen und somit über serielle Verbindungen angesprochen werden können. Unter Linux kann man mit einer Perl-Bibliothek Daten an die LCD-Anzeige schicken, was viele interessante Möglichkeiten eröffnet.
[mehr]
24.02.2010
 | Autor: Maximilian Kalus | Abgelegt in:  | Kommentare: 4

LED am USB-Port: Neue E-Mails anzeigen lassen

Auch ein "Digital Native" kann nicht immer am Rechner sitzen und auf neue E-Mails oder andere Nachrichten warten. Manchmal muss er oder sie beispielsweise auch essen oder andere körperliche Bedürfnisse befriedigen. Praktisch wäre es ja sowieso, wenn man neue Nachrichten visuell angezeigt bekäme. Manche Anrufbeantworter haben ja ein LED-Blinklicht. Das folgende Tutorial empfindet ein solches Blicklicht für E-Mails nach.
[mehr]
11.02.2010
 | Autor: Maximilian Kalus | Abgelegt in:  | Kommentare: 0

E-Mail-Liste per Visual Basic oder Perl reinigen

Fazit

Wie man sieht, sind die Programme im Kern einfach. Das VB-Net-Programm ist natürlich nicht ganz vollständig, zeigt jedoch die wesentliche Funktionsweise.

Bei der Perl-Datei wird die bereinigte Liste auf die Standardausgabe ausgegeben. Um diese in einer Datei zu speichern, gibt man folgendes an: cleanmail.php liste.txt > bereinigt.txt. Dies funktioniert unter Windows (z.B. mit ActiveState Perl) und natürlich unter unixoiden Systemen (Linux, BSD, Mac).

Wer die Programme herunterladen will, kann das hier machen:

VB.Net-Programmteil "cleanmail.exe"

Quelltext:  Alles auswählen  |  Zeilennummerierung an/aus
  1. Sub CleanFile(ByVal file As String, ByVal outFile As String)
  2.     Dim line As String
  3.  
  4.     tbOut.AppendText("Cleaning file: " + file + vbNewLine)
  5.  
  6.     'Open File
  7.     Dim sr
  8.     Try
  9.         Dim fs As New FileStream(file, FileMode.Open)
  10.         sr = New StreamReader(fs)
  11.     Catch ex As Exception
  12.         tbOut.AppendText("Could not find file " + file + ".")
  13.         Exit Sub
  14.     End Try
  15.  
  16.     'Write File
  17.     Dim sw
  18.     Try
  19.         Dim fo As New FileStream(outFile, FileMode.Create)
  20.         sw = New StreamWriter(fo)
  21.     Catch ex As Exception
  22.         tbOut.AppendText(("Could not create file " + file + "."))
  23.         Exit Sub
  24.     End Try
  25.  
  26.     'Read File - each line...
  27.     Do Until sr.Peek() = -1
  28.         line = sr.ReadLine()
  29.         If line <> "" And EmailAddressCheck(line) Then
  30.             sw.WriteLine(line)
  31.         Else
  32.             tbOut.AppendText("Stripped: " + line + vbNewLine)
  33.         End If
  34.     Loop
  35.  
  36.     'Close everything
  37.     sr.Close()
  38.     sw.Close()
  39.  
  40.     tbOut.AppendText("Finished writing " + outFile + ".")
  41. End Sub
  42.  
  43. Private Function EmailAddressCheck(ByVal emailAddress As String) As Boolean
  44.     Dim pattern As String = "^[a-zA-Z][a-zA-Z0-9\._%+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.([A-Za-z]{2,})$"
  45.     Dim emailAddressMatch As Match = Regex.Match(emailAddress, pattern)
  46.     If emailAddressMatch.Success Then
  47.         EmailAddressCheck = True
  48.     Else
  49.         EmailAddressCheck = False
  50.     End If
  51. End Function

Perl-Programm "cleanmail.pl"

Quelltext:  Alles auswählen  |  Zeilennummerierung an/aus
  1. #!/usr/bin/perl
  2.  
  3. #Parameter 1 muss eine Eingabedatei sein
  4. if(!$ARGV[0]) { print("Bitte eine Eingabedatei angeben!\n"); exit 1; }
  5. #Kann Datei geöffnet werden
  6. if (!open(HANDLE, $ARGV[0])) {
  7.     print("Konnte Datei ".$ARGV[0]." nicht finden!\n");
  8.     exit 1;
  9. }
  10.  
  11. #Datei zeilenweise abarbeiten
  12. foreach my $line (<HANDLE>) {
  13.     chomp($line); #Leerzeichen vorne und hinten entfernen
  14.     #auf E-Mail prüfen:
  15.     if ($line =~ /^[a-zA-Z][a-zA-Z0-9\._%+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.([A-Za-z]{2,})$/) {
  16.         print $line."\n"; #falls ok: Ausgeben
  17.     }
  18. }
  19.  
  20. exit 0;
Quelltext:  Alles auswählen  |  Zeilennummerierung an/aus
  1. info@testtest.com
  2. marcus.mueller@nocheintest.de
  3. Total falsch
  4. keine.@mail..xx
  5. Nicht@erlaubt
  6. root@sub.domain.com

Reguläre Ausdrücke

Um E-Mails auf Validität zu prüfen, ist der Einsatz von Regulären Ausdrücken (Regular Expressions) sinnvoll. Reguläre Ausdrücke können Texte auf Muster überprüfen. E-Mails sollten theoretisch dem RFC 2822 Standard entsprechen. Ein Regulärer Ausdruck zur Prüfung einer E-Mail nach diesem Standard findet man beispielsweise unter http://code.iamcal.com/php/rfc822/full_regexp.txt. Der Ausdurck ist dabei schlappe 3768 Zeichen lang und für die meisten Anwendungsfälle unnötig.

Folgender Ausdruck genügt für 99% der Fälle vollkommen: ^[a-zA-Z][a-zA-Z0-9\._%+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.([A-Za-z]{2,})$. Hierbei werden folgende Schritte ausgeführt:

  • Am Anfang der Mail muss ein Buchstabe (a-z oder A-Z) stehen.
  • Dann folgen 1 oder mehrere Zeichen, die auch Zahlen oder ., _, %, + und - enthalten können.
  • Jede E-Mail besitzt ein @.
  • Dann folgt eine Domain aus Buchstaben und Zahlen.
  • Möglicherweise existieren weitere Domainnamen, wenn die E-Mail einer Subdomain zugeordnet wurde.
  • Die Toplevel-Domain besteht nur aus Buchstaben und muss mindestens zwei Zeichen lang sein.

Nun kann man kleine Programme schreiben, welche E-Mails entsprechend auswerten. Als Beispiel habe ich im Folgenden Perl und VB.Net genommen (wurde von den Kunden nachgefragt).

Hin und wieder kommt es vor, dass Kunden von mir Listen mit E-Mails bereinigen müssen, beispielsweise für Newsletter. Da die Datenbestände oft falsche E-Mails enthalten, habe ich zwei kleine Programme zur E-Mail-Bereinigung in Perl und Visual Basic geschrieben.
[mehr]