Ruby-Programmierung: Bibliotheken
Zurück zu Ruby-Programmierung Hauptmenü
Programmieren mit REXML-Modul
BearbeitenREXML ist ein in reinem Ruby Code geschriebener XML-Parser.
Übersicht und Gebrauch des REXML-Moduls
BearbeitenLaden 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>
Programmieren mit WXRUBY Modul
BearbeitenÜbersicht und Gebrauch des wxRUBY 2 - Moduls
BearbeitenLaden 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 kann 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()
Programmieren mit FOX-Modul
BearbeitenÜbersicht und Gebrauch des fox16 - Moduls
BearbeitenAufgabe 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