Lebewesen

convertRezKonv2TXT2Tags

Apr 29th, 2012
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 5.36 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. #system $^O eq 'MSWin32' ? 'cls' : 'clear';
  6. system $^O eq 'MSWin32' ? 'del out.txt' : 'rm out.txt';
  7.  
  8. #my $Einheiten="bag|bags|bar|Barlöff.|bars|barspoon|barspoons|Becher|Bemerkung|Beutel|Blatt|Blätter|bottle|bottles|box|boxes|Briefchen|bunch|bunches|Bund|can|cans|capsule|capsules|carton|cartons|cg|cl|clove|cloves|cm|cm-piece|cm-pieces|cm-Stück|corm|corms|cube|cubes|cup|cups|dag|dash|dashes|dg|dl|Döschen|Dose|Dosen|dozen|dozens|drop|drops|Dutzend|ein paar|Einige|Essl.|Etwas|few|fl_oz.|Flasche|Flaschen|gallon|gallons|g-can|g-cans|g-Dose|geh. EL|geh. TL|gestr. EL|gestr. TL|g-Glas|g-glass|g-glasses|Glas|Gläschen|Gläser|glass|glasses|gram|Gramm|grams|groß.|handfull|handsfull|Handvoll|Hauch|head|heads|Kapsel|Kapseln|Karton|Kartons|Kästchen|kg|klein.|Knolle|Knollen|Kopf|Köpfe|Kugel|Kugeln|large|leaf|leaves|liter|liters|Ltr.|medium|Mehrere|Messersp.|Messl.|meter|meters|mg|mittl.|ml|ml-can|ml-Dose|ml-Glas|ml-glass|ounce|ounces|Paar|pack|Pack.|packs|pair|pairs|part|parts|Pfund|piece|pieces|pinch|pinches|pint|pints|plate|plates|Platte|Platten|plentiful|pot|pots|pound|pounds|Prise|Prisen|quart|quarts|Reichlich|Schale|Schalen|Scheibe|Scheiben|Schoppen|Schuss|scone|scones|several|shrub|shrubs|slice|slices|small|some|some|somewhat|sprig|sprigs|Spritzer|Spur|stalk|stalks|Stange|Stängel|Stangen|Staude|Stauden|stem|stems|Stich|stick|sticks|Stiel|Stiele|Streifen|strip|strips|Stück|Stücke|tablesp.|Tafel|Tafeln|Tasse|Tassen|teasp.|Teel.|Teil|Teile|Topf|Töpfe|Tranche|Tranchen|tranches|tray|trays|Tropfen|tube|Tuben|tubes|Tütchen|Tüte|Tüten|Wenig|Wenige|Würfel|x|Zehe|Zehen|Zentner|Zweig|Zweige";
  9.  
  10. ##Outputfile öffnen und t2t Header schreiben.
  11. my $OutFile = "out.txt";
  12. open DATEI, ">>$OutFile" || die "Can't open $OutFile: $!";{
  13.    print DATEI "Kochbuch\n\n\n";
  14.    print DATEI "%!target: html\n";
  15.    print DATEI "%!options: --css-sugar --toc --toc-level 3\n";
  16.    print DATEI "%!style(html): eBookStyleV1_2.css\n";
  17.    print DATEI "%!encoding: ANSI\n\n";
  18.    print DATEI "%!postproc(html): '#Br#' '<br>'\n";
  19. #   print DATEI "%!postproc(html): '<P>' '<P class=\"indent\">'";
  20.    print DATEI "\n----------------------------------------\n%%toc\n\n";
  21. }close (DATEI);
  22.  
  23. ##Datei oder Dateinamen
  24. #my @dateien = glob("*.rk");
  25. #foreach my $Dateiname (@dateien)
  26. #my $Dateiname="testdatei_big.txt";
  27. my $Dateiname="testdatei.txt";
  28.  
  29. #Variable für die komplette Datei
  30. my $daten;
  31.  
  32. {#Datei öffnen und einlesen
  33.     die $! unless my $rw = open(DATEI, $Dateiname);
  34.     while (defined($_ = <DATEI>)) {
  35.     $daten = $daten . $_;
  36.     }
  37.     close DATEI;
  38.     unless (defined $rw) {
  39.     print "Fehler beim \366ffnen der Datei '${Dateiname}':\n$!\n";
  40.     next;
  41.     }
  42. }
  43.  
  44. #$daten=~s%^(?:={5}.*?|-={4}.*?)REZKONV.*?$(.+?)^={5}$(.*)%$2%smi;
  45. ##Rezepte nacheinander bearbeiten
  46. $daten=~m%^(?:={5}.*?|-={4}.*?)REZKONV.*?$(.+?)^={5}$%gsmic;
  47. ##Suchposition
  48. #print "Position: ", pos $daten,"\n";
  49. my $rezept = $1; ##Rezept in Variable
  50. while ($rezept) ##Solange Rezepte in "Datei"...
  51. {
  52. $rezept=~s%\s*(.*?)\s*%$1%s;
  53.  
  54. $rezept=~m!(?:Titel|Title): *(.*)!;          my $Titel     =$1;
  55. print "$Titel\n\n";
  56. $rezept=~m!(?:Kategorien|Categories): *(.*)!;my $Kategorien=$1;
  57. $rezept=~m!(?:Menge|Yield|Servings): *(.*)!; my $Menge     =$1;
  58.  
  59. $rezept=~m%(?:Menge|Yield|Servings).*?$   #Nach der Menge beginnen die Zutaten
  60.            (?:Zutaten|Ingredients)?(?::)? #kann vorkommen
  61.            ^(.*?)                         #Capturegroup für Zutaten
  62.            (?-s:^.*?(?i:QUELLE|SOURCE|REF):?\s*=*) #Quelle wird eingeleitet
  63.            \s*(.*?)\s*?                   #Capturegroup für Quelle
  64.            ^$                             #Quelle endet mit Leerzeile
  65.            (?i:Zubereitung|Directions)?(?::)? #kann vorkommen
  66.            (.*?)\s*?                      #Capturegroup für Zubereitung
  67.            (:\s*O-Titel.*)?               #Capturegroup für langen Titel
  68.            \Z
  69.           %msx;
  70. my $Zutaten = $1;
  71. my $Quelle = $2;
  72. my $Zubereitung = $3;
  73. my $Titel_lang = $4;
  74.  
  75. $Zutaten =~ s% *\n *-{1,2} ?% %g;
  76.  
  77. if ($Titel_lang){
  78.   $Titel_lang =~ s%(: O-Titel\s*:\s|: >\s*)(.*?)%$2%gm;
  79.   $Titel_lang =~ s%(\n|\s{2,})% %gs;
  80.   $Titel_lang =~ s%^\s*(.*?)\s*$%$1%s;
  81.   $Titel = $Titel_lang;
  82.   #print "langer Titel gefunden\n";
  83. }else{
  84. #print "kein langer Titel\n";
  85. }
  86. print "$Titel\n";
  87.  
  88. #$Zutaten =~ s%(?:\n)*^([^=]{8})(.{11})(.*)%\n| $1 | $2 | $3%gm;
  89. $Zutaten =~ s%(?:\n)*^\s*([^=].*?)%\n- $1%gm;
  90.  
  91. $Quelle =~ s%(?:\n)*^\s*([^=].*)%\n| $1%gm;
  92.  
  93. #print "~~~ Output to '$OutFile'\n";
  94. #print "$Dateiname\n";
  95. if ($Titel)
  96. {
  97.     open DATEI, ">>$OutFile" || die "Can't open $OutFile: $!";
  98.     print DATEI "$rezept\n~~~~\n";
  99.     print DATEI "$OutFile\n~~~~~~~~~~~~~~~~~~\n";
  100.     print DATEI "\n*********************************************************\n";
  101.     print DATEI "\n~~~~ Titel ~~~~\n$Titel";
  102.     print DATEI "\n~~~~ Zutaten ~~~~\n$Zutaten";
  103.     print DATEI "\n~~~~ Quelle ~~~~\n$Quelle";
  104.     print DATEI "\n~~~~ Zubereitung ~~~~\n$Zubereitung";
  105.     if ($Titel_lang) {print DATEI "\n~~~~ Titel lang ~~~~\n$Titel_lang"};
  106.     print DATEI "\n== $Titel ==\n";
  107.     print DATEI "$Zutaten\n\n";
  108.     print DATEI "$Zubereitung\n\n";
  109.     print DATEI "$Quelle\n\n";
  110. }
  111. close (DATEI);
  112. #$daten=~s%^={5}.*?REZKONV.*?$(.+?)^={5}$(.*)%$2%smi;
  113. $daten=~m%^(?:={5}.*?|-={4}.*?)REZKONV.*?$(.+?)^={5}$%gsmic;
  114. #print "Position: ", pos $daten,"\n";
  115. $rezept=$1;
  116. }
  117. #perl -MO=Deparse,-sT,-I,-sC convert.pl
Advertisement
Add Comment
Please, Sign In to add comment