Ruby Spickzettel
Case-Konstrukt
--------------
i = 10
case i
when 10, 20, 30
puts "i ist 10 oder 20 oder 30"
when 1
puts "i ist 1"
else
puts "i ist irgendwas anderes"
end
Modusstring Dateioperationen
----------------------------
r - nur lesen
r+ - nur lesen, beginnt am Anfang der Datei
w - nur schreiben
w+ - lesen + schreiben
a - schreiben anhängend (append)
a+ - lesen + schreiben am Ende
b - Binärmodus, nur für Dos/Windows (z.B. wb, rb)
Globale Variablen
-----------------
Exceptions:
$! Exception Information Message.
$@ Backtrace of the last Exception.
Reguläre Ausdrücke:
$& gefundenes Suchmuster der letzten Aktion.
nil, wenn nicht gefunden.
$` String, der dem Gefundenen vorausgeht.
$' String, der dem Gefundenen folgt
$+ Übereinstimmung der letzten Klammer(?)
$1,
$2,... Teilstrings, die durch Klammern im Suchmuster
getrennt sind.
$~ Information der letzten Musteraktion. $1 - $9 werden
hieraus abgeleitet und eine Änderung von bspw. $~[3]
ändert $3. Die Variable ist lokal zum aktuellen
Gültigkeitsbereich
$= Groß/Kleinschreibung berücksichtigen. Ein Wert ungleich
nil führt dazu, das sie nicht berücksichtigt wird.
Default ist nil.
IO:
$/ Input Record Separator, \n default, wenn nil, dann
wird das gesamte File mit einmal eingelesen.
$\ Output Record Separator für print und io#write.
Default ist nil.
$, Output Field Separator für print und Array#join
$; Default Separator für String#split.
$-F
$. Current input line Number, des zuletzt gelesenen Files.
$< Aktuelles Input File. stdin, wenn kein File übergeben.
ARGF
$> Aktuelles Output File. stdout ist default.
$_ Zuletzt gelesene Zeile des Input Files.
(gets oder readline)
nil, wenn eof.
$stdin Standard Input
$stdout Standard Output
$stderr Standard Error
$defout Default Output
printf Formatstring:
- %d - Integer
- %s - String
- %10s Wird auf 10 Zeichen erweitert durch Space links, wird nicht gekürzt
- %-10s Space wird rechts angefügt statt links.
- %2.2s Wird genau auf 2 Zeichen gebracht durch Verkürzung oder Verlängerung
- %f - Fließkomma
Environment:
$0 Filename des Ruby-Skripts
$* Command line arguments, welche dem Skript übergeben
wurden. (Array)
ARGV
$$ Prozess Nummer des Ruby-Skripts.
$: Array, welches alle Suchpfade beinhaltet,
$LOAD_PATH wo load und require suchen.
$-I
$" Array, Liste von allen geladenen Modulen, die durch
require geladen wurden. Require nutzt diese, um Module
nicht doppelt zu laden.
$VERBOSE Verbose Flag, welches durch -v gesetzt wird
$-v
$DEBUG Status des -d Switches
$-d
$-a Wahr, wenn -a gesetzt wurde
$-i Wenn -i gewählt, dann steht hier die extension
$-l Option -l ist gesetzt.
$-p Option -p ist gesetzt.
$? Exitcode eines externen Programmes, welches mit `cmd`
ausgeführt wurde. Sollte mit $?.to_i >> 8 korrigiert
werden. 0 entspricht keinem Fehler unter Linux.
Prozess:
$? Status des zuletzt gestarteten Child-Prozesses
Standard-Objekte:
ENV Ein Hash, mit dem man auf alle Environment-Variablen Zugriff hat.
Bsp: ENV["PATH"] = '/usr/bin'
false Der Wert false
nil Der Wert unitialisiert
self Der Empfänger der aktuellen Methode
true Der Wert true
Globale Konstanten
------------------
TRUE true
FALSE false
NIL nil
STDIN stdin, default value for $stdin
STDOUT stdout
STDERR stderr
ENV Environment Variablen, hash
ARGF Alias zu $<
ARGV Alias zu $*
DATA ?
VERSION Ruby Version String
RUBY_RELEASE_DATE Release String
RUBY_PLATFORM Platform
Kommentare
----------
# Comment
=begin
Comment
...
=end
i18n / Zeichensätze
-------------------
Jeder String und jedes IO-Objekt hat eine Eigenschaft Zeichensatz hinterlegt.
Dieser wird verwendet, um den Bytestrom richtig zu intepretieren.
String (Bytestrom) auf Basis eines Zeichensatzes interpretieren
* str.force_encoding( "utf-8" )
String in einen anderen Zeichensatz umwandeln/konvertieren
* str.encode( "iso-8859-15" )
String auf Basis eines Zeichensatzes intepretieren und dann konvertieren
* str.encode( <Ziel-Zeichensatz>, <Interpretation von str> )
* str.encode( "iso-8859-15", "utf-8") ist identich mit
str.force_encoding( "utf-8" ).encode( "iso-8859-15" )
Dateizugriffe
* File.readlines( filename, :encoding => "iso-8859-15")
* File.open( filename, :encodign => "iso-8859-15" )
Exeptions: Wird im Bytestrom eine Sequenz gefunden, die nicht zum aktuellen
Zeichensatz passt, wird eine Exeption abgeworfen. Will man das nicht und
stattdessen solche Zeichen mit einer Vorgabe ersetzen, dann geht das so:
* s.encode( "utf-8", :undef => :replace, :replace => "??" )
Datei-Zugriffe
-------------
f = File.open( filename, "r" ) # lesend (r+ = read/write)
f = File.open( filename, "w" ) # überschreibend (w+ = read/write)
f = File.open( filename, "a" ) # anhängend schreibend (a+ = read/write)
f = File.open( filename, "rb" ) # lesend binär
f = File.open( filename, "w", 0660 ) # schreibend, wenn nicht existiert, dann
# neu anlegen mit 0660 Rechten.
# Achtung: Wird mit umask maskiert.
# Wenn File bereits vorhanden, keine Änderung
# der Rechte
f.close() # File schließen
Modes: r, r+, w, w+, rb, wb, a, a+
File.open( filename, "w" ) do |f|
f.puts "Foobar"
end
File.foreach( filename ) do |line|
puts line
end
arr = File.readlines( filename, :encoding => "utf-8" ) # Alle Zeilen lesen
fn = File.join( dirname, dirname, ... , filename )
Dir.foreach( path ) do |file| ... end # Verzeichnis alle Dateien/Ordner
Dir.mkdir( dir ) # Verzeichnis erstellen
File.file?() # ist es ein File
File.directory?() # ist es ein Verzeichnis
Klassen
-------
class MyClass
Constant1 = "Foobar"
@@class_info = "Klassenvariable"
def self.classMethod
puts @@class_info
# Bei Vererbung verhält sich self.Classmethod anders, als MyClass.ClassMethod
end
def initialize..
#Objekt-Inititialisierung durch Aufruf von MyClass.new
end
def public_methods...
@instanz_variable = "Objektdaten"
private
def privat_methods...
private_class_method :classMethod
attr_accessor :x, :y ...
attr_reader :x, :y
attr_writer :x, :y
end
Module
------
module Config
Debug = true
Path = "/etc"
end
if Config::Debug ...
--
Array
-----
a = [ "first", "second" ]
a[0] # -> "first"
a.pop # -> "second" Element wird entfernt
a.push( "second" ) # Wird hinten angefügt
a << "third" # identisch mit push
a.each do |element|
puts element
end
a.each_index |i|
puts a[i]
end
puts a.join( "\n" ) #Array als String zusammenfügen
#hier mit Zeilenschaltung separiert
String
------
s = "Hello\n"
s.chomp #return string ohne Zeilenschaltung "\n" und auch "\r\n" wird entfernt
s.chomp! #verändert s in "Hello"
s.length #Anzahl Zeichen
s.strip / s.strip! #Leerzeichen links und rechts löschen
s.lstrip /s.lstrip! #Leerzeichen links löschen
s.rstrip /s.rstrip! #Leerzeichen rechts löschen