Ruby-Programmierung: Bibliotheken
Aus Wikibooks
Zurück zu Ruby-Programmierung Hauptmenü
Inhaltsverzeichnis |
[Bearbeiten] Programmieren mit REXML-Modul
REXML ist ein in reinem Ruby Code geschriebener XML-Parser.
[Bearbeiten] Übersicht und Gebrauch des REXML-Moduls
Laden des Moduls wird in Ruby mit require "rexml/document" eingeleitet.
Damit wird der Namensraum REXML:: erzeugt.
- Einlesen einer XML-Datei
# Laden des REXML-Modul document require "rexml/document" # Eine XML-Datei laden file = File.new( "eineXMLDatei.xml" ) # XML-Datei in eine Variable speichern doc = REXML::Document.new file # Ausgabe der XML-Datei puts doc.to_s
- Erzeugen einer XML-Datei
require "rexml/document"
# File-Objekt erzeugen
file = File.new( "make.xml","w" )
# Variable für Erzeugung der XML-Datei zur Verfügung stellen
doc = REXML::Document.new
# XML-Decleration erzeugen und übergeben
doc << REXML::XMLDecl.new(1.0, "ISO-8859-1", "no")
# Root-Tag erzeugen und anhängen
doc.add_element(REXML::Element.new("root"))
# Root-Tag-Attribut erzeugen und anhängen
doc.root.attributes["Attr1"] = "wert1"
# Root Tag Attribut erzeugen und anhängen
doc.root.attributes["Attr2"] = 5
# Variable mit Tag definieren
e = REXML::Element.new( "eintrag")
# Variable mit Wert belegen
e.add_text REXML::Text.new(' bar2')
# An Variable für Erzeugung XML-Datei übergeben
doc.root.add_element(e)
e = REXML::Element.new( "eintrag")
e.add_text REXML::Text.new(' bar')
# Für Variable Attribut erzeugen und anhängen
e.attributes["Attr1"] = 23
doc.root.add_element(e)
e = REXML::Element.new( "eintrag")
e.add_text REXML::Text.new('1 Text ')
e.add_text REXML::Text.new('2 Text ')
e.attributes["c1c"] = 23
doc.root.add_element(e)
e = REXML::Element.new("eintrag")
e.add_text REXML::Text.new('1 Text ')
e.add_text REXML::Text.new('2 Text ')
e.attributes["c1c"] = 23
# Überschreibt 1 Text
e.text = "noch ein Text "
doc.root.add_element(e)
# Einhängen von Tags vor 1. Tag
doc.root[0,0] = REXML::Element.new "davor"
doc.root[0,0] = REXML::Element.new "davor1"
# Ausgabe auf Konsole
doc.write( $stdout, 0 )
# In Datei schreiben
file << doc
# Datei schliessen
file.close
- Aussehen der erzeugten XML-Datei
<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?> <root Attr1='wert1' Attr2='5'> <davor1/> <davor/> <eintrag> bar2</eintrag> <eintrag Attr1='23'> bar</eintrag> <eintrag c1c='23'>1 Text 2 Text </eintrag> <eintrag c1c='23'>noch ein Text 2 Text </eintrag> </root>
[Bearbeiten] Programmieren mit WXRUBY Modul
[Bearbeiten] Übersicht und Gebrauch des wxRUBY 2 - Moduls
Laden des Moduls wird in Ruby mit
begin require 'wx' rescue LoadError => no_wx_err begin require 'rubygems' require 'wx' rescue LoadError raise no_wx_err end end
eingeleitet.
Einfaches Fenster:
class Fenster < Wx::Frame def initialize(title, pos, size, style = Wx::DEFAULT_FRAME_STYLE) super(nil, -1, title, pos, size, style) #Durch die Verwendung des Schlüsselwortes super kannt man #Methoden und den Konstruktor der Wx::Frame Klasse aufrufen if Wx::PLATFORM == "WXMSW" set_icon( Wx::Icon.new(local_icon_file("mondrian.ico"), Wx::BITMAP_TYPE_ICO) ) else set_icon( Wx::Icon.new(local_icon_file("mondrian.xpm"), Wx::BITMAP_TYPE_XPM) ) end menu_file = Wx::Menu.new() menu_help = Wx::Menu.new() menu_help.append(Wx::ID_ABOUT, "&About\tF1") menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X") menu_bar = Wx::MenuBar.new() menu_bar.append(menu_file, "&File") menu_bar.append(menu_help, "&Help") set_menu_bar(menu_bar) create_status_bar(2) set_status_text("einfaches Fenster mit wxRuby!") # Verbindung events mit def Funktionen # der Übersicht wegen in Funktion ausgelagert evt_menu(Wx::ID_EXIT) { on_quit } evt_menu(Wx::ID_ABOUT) { on_about } end #def Funktionen der events def on_quit close() end def on_about msg = sprintf("Dialogfenster.\n" \ "mit wxRuby Version %s", Wx::WXRUBY_VERSION) about_dlg = Wx::MessageDialog.new( self, msg, 'Einfaches Fenster', Wx::OK|Wx::ICON_INFORMATION ) about_dlg.show_modal() about_dlg.destroy() end def local_icon_file(icon_name) File.join( File.dirname(__FILE__), icon_name) end end #Wx::App ist für alle wxruby vorgeschrieben ein Vererbung #stellt dadurch alle Methoden(Funktion) zur Verfügung class Fensterclass < Wx::App def on_init frame = Fenster.new("Minimal wxRuby App", Wx::Point.new(50, 50), Wx::Size.new(450, 340)) frame.show() end end #Nun starten der wxruby Anwendung app = Fensterclass.new app.main_loop()
[Bearbeiten] Programmieren mit FOX-Modul
[Bearbeiten] Übersicht und Gebrauch des fox16 - Moduls
Aufgabe des Programms überprüfen des EAN Code an einem Beispiel einer Getränkeflasche
5449000017956 hier ist die Prüfziffer 6 Okay wenn nicht wird richtige Ziffer angezeigt
require 'fox16' #include Fox #einfügen wenn Namespace nicht mit angeben werden soll class EanPruefziffer def initialize(ean=nil,le=nil) if ean @ean=ean if ean =~/[a..zA..ZäöüÄÖÜß]/ or ean.size==0 or ean.size != le STDERR.print "Argument unzulaessig" @erg="Eingabe unzulaessig" #exit(-1) else if @ean[-1]-48 == pruef(le) @erg="Pruefziffer ist korrekt" # exit(0) else STDERR.print "Pruefsummenfehler" @erg="Pruefsummenfehler #{pruef(le)}" #exit(1) end #if end #if else STDERR.print "Fehler\n#{__FILE__ } String oder\n#{__FILE__ } -l n [String]\n" end end #def initialize def text() @erg end #def text def pruef(opt=13) summe=0 pruefziffer=0 @ean[0..(opt-2)].each_byte {|s| pruefziffer=pruefziffer + (s.to_i - 48) * ( 1 +( summe%2 )* 2) summe += 1 } (10- (pruefziffer%10)) end #def pruef end #class EanPruefziffer
Klassen definiert so das alle Buttons gleich sind und nur das übergeben was den unterschied zwischen Button ausmacht
class Button < Fox::FXButton def initialize(main,text) super(main,text,nil,nil,0,Fox::BUTTON_NORMAL|Fox::LAYOUT_FIX_WIDTH,10,10,150,50,10,10,10,10) self.font =Fox::FXFont.new(getApp(),"Arial Black", 15,Fox::FONTWEIGHT_BOLD) end #def initialize end #class Button
class Label < Fox::FXLabel def initialize(main,text) #|Fox::LAYOUT_FIX_WIDTH super(main,text,nil,Fox::LABEL_NORMAL|Fox::JUSTIFY_CENTER_X,10,10,300,50,10,10,10,10) self.font =Fox::FXFont.new(getApp(), "Arial Black", 15,Fox::FONTWEIGHT_BOLD) end #def initialize end #class Label
class Text < Fox::FXTextField def initialize(main) #|Fox::JUSTIFY_CENTER_X|Fox::LAYOUT_FIX_WIDTH super(main,13,nil,0,Fox::TEXTFIELD_NORMAL,0,0,100,50,10,10,10,10) self.font =Fox::FXFont.new(getApp(), "Arial Black", 15,Fox::FONTWEIGHT_BOLD) end #def initialize end #class Text
class RadioButton < Fox::FXRadioButton def initialize(gp,text,gp_datatarget,zahl) super(gp, text , gp_datatarget, Fox::FXDataTarget::ID_OPTION+zahl, Fox::ICON_BEFORE_TEXT|Fox::LAYOUT_SIDE_TOP) self.font =Fox::FXFont.new(app, "Arial Black", 10,Fox::FONTWEIGHT_BOLD) end #def initialize end #class RadioButton
app = Fox::FXApp.new main = Fox::FXMainWindow.new(app, "EAN TOOL" ,nil,nil,Fox::DECOR_ALL,0,0,400,400,20,20,20,20) label1=Label.new(main,"EAN Pruefziffer") textfeld=Text.new(main) label2=Label.new(main,"EAN 13 Code eingeben") button1=Button.new(main,"Pruefen") button1.connect(Fox::SEL_COMMAND) do |sender, sel, checked| label2.text=EanPruefziffer.new(textfeld.text.to_s,textfeld.numColumns).text() end # do self gp_data = Fox::FXDataTarget.new(1) gp = Fox::FXGroupBox.new(main, "Auswahl Code",Fox::LAYOUT_SIDE_TOP|Fox::FRAME_GROOVE|Fox::LAYOUT_FIX_WIDTH|Fox::LAYOUT_FILL_X, 0, 0,200,200,10,10,10,10) RadioButton.new(gp, "EAN 8", gp_data,0) RadioButton.new(gp, "EAN 13", gp_data,1) RadioButton.new(gp, "EAN 14", gp_data,2) RadioButton.new(gp, "NVE 18", gp_data,3) gp.font =Fox::FXFont.new(app, "Arial Black", 15,Fox::FONTWEIGHT_BOLD) gp_data.connect(Fox::SEL_COMMAND) do case gp_data.value when 0 textfeld.numColumns=8 textfeld.text="" label2.text="EAN 8 Code eingeben" when 1 textfeld.numColumns=13 textfeld.text="" label2.text="EAN 13 Code eingeben" when 2 textfeld.numColumns=14 textfeld.text="" label2.text="EAN 14 Code eingeben" when 3 textfeld.numColumns=18 textfeld.text="" label2.text="NVE 18 Code eingeben" end# case end#connect textfeld.connect(Fox::SEL_KEYPRESS) do|sender, sel, item| if item.code >= 48 and item.code <=57 if textfeld.cursorPos<textfeld.numColumns textfeld.text+=item.code.chr end #if else STDOUT.print "erg #{item.code}" STDOUT.flush() case item.code when 65288 #Rücktab textfeld.text=textfeld.text[0..-2] when 65293 #Return label2.text=EanPruefziffer.new(textfeld.text.to_s,textfeld.numColumns).text() end #case end #if end #conect app.create main.show(Fox::PLACEMENT_SCREEN) app.run