BeanShell - Textdatei auslesen

Bei Problemen mit der Bedienung von TV-Browser, bitte hier posten.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

BeanShell - Textdatei auslesen

Beitrag von Sheldon2012 »

Hi,

kannst Du mir bitte kurz erklären, wie man in BeanShell eine Textdatei ausliesst.
Ich mache da wohl etwas falsch.
Wenn ich das richtig verstehe, kann ich doch alles wie in Java machen, oder?

Ich habe folgendes versucht:

-------------------------------------------------------------------------------------------------------------------------------

Code: Alles auswählen

import devplugin.beanshell.BeanShellProgramFilterIf; 
import devplugin.Program; 
import devplugin.ProgramFieldType; 

import java.io.FileReader;
import java.io.BufferedReader;

accept(Program prog) {

   String title = prog.getTextField(ProgramFieldType.TITLE_TYPE); 
   String episode = prog.getTextField(ProgramFieldType.EPISODE_TYPE); 

   String fileName = "C:\\Workspace\\episodes.txt";
   String line = null;

   if ((title != null) && (title.trim().length() > 0) && (episode != null && episode.trim().length() > 0)){
   
      try {

         FileReader fr = new FileReader(fileName);
         BufferedReader br = new BufferedReader(fr);
         
         line = br.readLine();
      
         while(line != null) {    

            String[] lineParts = line.split(";");
            String favTitle = lineParts[0].trim(); 
            String favEpisode = lineParts[1].trim(); 
    
            if (title.trim().equals(favTitle) && episode.trim().equals(favEpisode)){
  
               return true; 
            }
            
            line = br.readLine();
         }

      } finally {
      
         fileReader.close();
         bufferedReader.close();
      
      }
   }

   return false; 
} 

return (BeanShellProgramFilterIf) this; 
---------------------------------------------------------------------------------------------------------------------------------

So würde man das ja in Java machen. Klappt aber nicht. Was mache ich falsch?

Inhalt der Textdatei C:\\Workspace\\episodes.txt ist:

Die Rosenheim-Cops;Ein Abgang mit Blubb

Gruß

Sheldon
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: BeanShell - Textdatei auslesen

Beitrag von ds10 »

Ob man Dateien mit Beanshell öffnen kann weiß ich nicht. Um den Dateizugriff fehlt aber auf jeden Fall ein try{}catch(IOException ioe){}-Block.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: BeanShell - Textdatei auslesen

Beitrag von Sheldon2012 »

Es gibt gute Nachrichten! Es geht!
Somit hat man einen dynamischen BeanShell-Filter bzw. eine BeanShell-Filter-Schittstelle.
Vielleicht ist das ja auch für andere interessant. Was meinst Du?
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: BeanShell - Textdatei auslesen

Beitrag von ds10 »

Schon möglich, aber dann müsstest du schon die korrigierte Version veröffentlichen, die keine Exception wirft, weil auf Variablen zugegriffen wird, die es nicht oder an der Stelle nicht gibt.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: BeanShell - Textdatei auslesen

Beitrag von Sheldon2012 »

Das ist meine ajtuelle Version (leider kann ich den Code hier nicht vernünftig formatieren):

Code: Alles auswählen

import devplugin.beanshell.BeanShellProgramFilterIf;
import devplugin.Program;
import devplugin.ProgramFieldType;

import java.io.FileReader;
import java.io.BufferedReader;

accept(Program prog) {

   String title = prog.getTextField(ProgramFieldType.TITLE_TYPE);
   String episode = prog.getTextField(ProgramFieldType.EPISODE_TYPE);

   String file = "C:\\WorkspaceI\\episodes.txt";

   BufferedReader br = new BufferedReader(new FileReader(file));
   
   String line = "";
   line = br.readLine();

   while (line != null){

      if ((title != null) && (title.trim().length() > 0) && (episode != null && episode.trim().length() > 0)){

         line = line.trim();

         String[] lineParts = line.split(";");
         String favTitle = lineParts[0].trim();
         String favEpisode = lineParts[1].trim();

         if (title.trim().equals(favTitle) && episode.trim().contains(favEpisode)){

            return true;
         }
      }

      line = br.readLine();
   }

   return false;

}

return (BeanShellProgramFilterIf) this; 
Die Date sieht so aus:

dummy;dummy
Die Rosenheim-Cops;Ein Abgang mit Blubb

Man benötigt eine erste Zeile!
try{}-Catch{} funktioniert irgendwie gar nicht. Die meisten Scripte, die ich so gesehen habe, arbeiten ohne Exception-Handling. BeanShell scheint da etwas anders zu funktionieren als Java.
uzi
Site Admin
Beiträge: 2294
Registriert: 02 Jul 2009, 14:32

Re: BeanShell - Textdatei auslesen

Beitrag von uzi »

um code zu formatieren, benutzt man logischerweise das code-tag. ich hab das mal für dich übernommen.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: BeanShell - Textdatei auslesen

Beitrag von Sheldon2012 »

Danke für den Hinweis und die Formatierung! :)
War wohl gestern abend schon ein wenig zu spät! :?
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: BeanShell - Textdatei auslesen

Beitrag von ds10 »

Du könntest es ja auch als Artikel im Wiki eintragen, als Verlinkung im Bezug zum Beanshell-Filter.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: BeanShell - Textdatei auslesen

Beitrag von Sheldon2012 »

Das hatte ich auch vor. Ich wollte es nur zuvor mit Dir abklären.
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: BeanShell - Textdatei auslesen

Beitrag von ds10 »

Das ist aber nicht nötig, du kannst im Wiki eintragen, was dir nützlich erscheint und etwas mit TV-Browser zu tun hat.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: BeanShell - Textdatei auslesen

Beitrag von Sheldon2012 »

Ich habe das Skript noch überarbeitet. Wenn Du kurz einen Review machen könntest, wäre das gut.
Das Vier-Augen-Prinzip ist immer besser.

Irgendwie mag BeanShell keine finally{}-clause. Da wirft der BSH-Parser immer Exceptions.

Code: Alles auswählen

// Beanshell-Filter: CSV file interface  

import devplugin.beanshell.BeanShellProgramFilterIf;
import devplugin.Program;
import devplugin.ProgramFieldType;

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

accept(Program prog) throws IOException {

   // Reading program data 
   String title = prog.getTextField(ProgramFieldType.TITLE_TYPE);
   String episode = prog.getTextField(ProgramFieldType.EPISODE_TYPE);

   // Program data comparison preparation
   title = title.replaceAll("[^0-9a-zA-Z]", "").trim(); 
   episode = episode.replaceAll("[^0-9a-zA-Z]", "").trim();

   // CSV file settings
   String file = "C\\Workspace\\episodes.txt";
   [code]
String separator = ";";
String line = "";

// Program data check
if ((title != null) && (title.trim().length() > 0) && (episode != null) && (episode.trim().length() > 0)){

try{

// Read CSV file
BufferedReader br = new BufferedReader(new FileReader(file));

line = br.readLine();

while (line != null){

line = line.trim();

String[] lineParts = line.split(separator);

// CSV data comparison preparation
String favTitle = lineParts[0].replaceAll("[^0-9a-zA-Z]", "").trim();;
String favEpisode = lineParts[1].replaceAll("[^0-9a-zA-Z]", "").trim();

// Data comparison
if (title.trim().equals(favTitle) && episode.trim().equals(favEpisode)){

// Close reader
try {
if (br != null){
br.close();
}
} catch (IOException e) {
throw e;
}

return true;
}

line = br.readLine();
}

// Close reader
try {
if(br != null){
br.close();
}
} catch (IOException e) {
throw e;
}

return false;

}catch (IOException ioe) {

// Close reader
try {
if (br != null){
br.close();
}
} catch (IOException e) {
throw e;
}

throw ioe;
}
}else{

// Program data check failed
return false;

}
}

return (BeanShellProgramFilterIf) this; [/code]
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: BeanShell - Textdatei auslesen

Beitrag von ds10 »

Da sind ein paar falsch positionierte Code-Tags drin, aber sonst sieht es gut aus. Das Schöne beim programmieren (von überschaubarem Code) ist ja, dass man einfach testen kann und dann sieht, ob es funktioniert.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: BeanShell - Textdatei auslesen

Beitrag von Sheldon2012 »

Die Idee hinter dieser Schnittstelle geht noch etwas weiter.
In Verbindung mit den Plugins

Filter-Filterkomponente
Filter-Info-Icon

kann man so dynamisch Sendungen markieren, die sich in einer beliebigen Datensammlung befinden. Dies können eine Mediathek wie XMBC, Media Portal, Windows Media Center, eine Datenbank oder einfach Mediadateien im File-System sein.
Die Schnittstelle muss aus diesen Sammlungen nur mit Daten versorgt werden.

Wenn man mit der BeanShell-Filterkomponente einen Filter erzeugt, kann man den wiederum über den Hervorhebungsfilter mit dem Switch-Plugin verbinden. Wenn das Switch-Plugin entsprechend konfiguriert ist, kann man dann aus dem TV-Browser die Mediendateien aus der jeweiligen Sammlung aufrufen. Man weiß ja, das sie da sind.

Damit ergibt sich eine universelle bidirektionale Schnittstelle zwischen TV-Browser und einer beliebigen Mediensammlung.
Ein Plugin erübrigt sich. Die Daten müssen nur noch bereitgestellt bzw. abgeholt werden.
Zuletzt geändert von Sheldon2012 am 26 Feb 2015, 16:38, insgesamt 1-mal geändert.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: BeanShell - Textdatei auslesen

Beitrag von Sheldon2012 »

Wo sind den die falschen Tags? Beispiel?
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: BeanShell - Textdatei auslesen

Beitrag von ds10 »

Code: Alles auswählen

[code]
String separator = ";";[/code]
und am Ende.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Antworten