Class: Lingo::Attendee::TextReader
- Inherits:
-
Lingo::Attendee
- Object
- Lingo::Attendee
- Lingo::Attendee::TextReader
- Includes:
- TextUtils
- Defined in:
- lib/lingo/attendee/text_reader.rb
Overview
– Der TextReader ist eine klassische Datenquelle. Er liest eine oder mehrere Dateien und gibt sie Zeilenweise in den Ausgabekanal. Der Start bzw. Wechsel einer Datei wird dabei über den Kommandokanal angekündigt, ebenso wie das Ende.
Der TextReader kann ebenfalls ein spezielles Dateiformat verarbeiten, welches zum Austausch mit dem LIR-System dient. Dabei enthält die Datei Record-basierte Informationen, die wie mehrere Dateien verarbeitet werden.
Mögliche Verlinkung
- Erzeugt
-
Daten des Typs String (Textzeile) z.B. für Tokenizer, Textwriter
Parameter
Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung). Alle anderen Parameter müssen zwingend angegeben werden.
- out
-
siehe allgemeine Beschreibung des Attendee
- files
-
Es können eine oder mehrere Dateien angegeben werden, die nacheinander eingelesen und zeilenweise weitergeleitet werden. Die Dateien werden mit Komma voneinander getrennt, z.B.
files: 'readme.txt' files: 'readme.txt,lingo.cfg' - records
-
Mit diesem Parameter wird angegeben, woran der Anfang eines neuen Records erkannt werden kann und wie die Record-Nummer identifiziert wird. Das Format einer LIR-Datei ist z.B.
[00001.] 020: ¬Die Aufgabenteilung zwischen Wortschatz und Grammatik. [00002.] 020: Nicht-konventionelle Thesaurusrelationen als Orientierungshilfen.Mit der Angabe von
records: "^\[(\d+)\.\]"werden die Record-Zeilen erkannt und jeweils die Record-Nummer
00001, bzw.00002erkannt.
Generierte Kommandos
Damit der nachfolgende Datenstrom einwandfrei verarbeitet werden kann, generiert der TextReader Kommandos, die mit in den Datenstrom eingefügt werden.
- *FILE(<dateiname>)
-
Kennzeichnet den Beginn der Datei <dateiname>
- *EOF(<dateiname>)
-
Kennzeichnet das Ende der Datei <dateiname>
- *LIR_FORMAT(”)
-
Kennzeichnet die Verarbeitung einer Datei im LIR-Format (nur bei LIR-Format).
- *RECORD(<nummer>)
-
Kennzeichnet den Beginn eines neuen Records (nur bei LIR-Format).
Beispiele
Bei der Verarbeitung einer normalen Textdatei mit der Ablaufkonfiguration t1.cfg
meeting:
attendees:
- text_reader: { out: lines, files: '$(files)' }
- debugger: { in: lines, prompt: 'out>' }
ergibt die Ausgabe über den Debugger: lingo -c t1 test.txt
out> *FILE('test.txt')
out> "Dies ist eine Zeile."
out> "Dies ist noch eine."
out> *EOF('test.txt')
Bei der Verarbeitung einer LIR-Datei mit der Ablaufkonfiguration t2.cfg
meeting:
attendees:
- text_reader: { out: lines, files: '$(files)', records: "^\[(\d+)\.\]" }
- debugger: { in: lines, prompt: 'out>'}
ergibt die Ausgabe mit lingo -c t2 lir.txt
out> *LIR-FORMAT('')
out> *FILE('lir.txt')
out> *RECORD('00001')
out> "020: \254Die Aufgabenteilung zwischen Wortschatz und Grammatik."
out> *RECORD('00002')
out> "020: Nicht-konventionelle Thesaurusrelationen als Orientierungshilfen."
out> *EOF('lir.txt')
++
Constant Summary
Constants included from TextUtils
TextUtils::DEFAULT_MODE, TextUtils::GZIP_RE, TextUtils::STDIN_EXT, TextUtils::STDOUT_EXT
Constants inherited from Lingo::Attendee
Constants included from Language
Language::CHAR_PUNCT, Language::LA_SORTORDER, Language::TA_ABBREVIATION, Language::TA_HELP, Language::TA_HTML, Language::TA_NUMBER, Language::TA_OTHER, Language::TA_PUNCTUATION, Language::TA_SKIP, Language::TA_SPACE, Language::TA_URL, Language::TA_WIKI, Language::TA_WORD, Language::WA_COMPOUND, Language::WA_IDENTIFIED, Language::WA_MULTIWORD, Language::WA_SEQUENCE, Language::WA_UNKMULPART, Language::WA_UNKNOWN, Language::WA_UNSET
Instance Attribute Summary
Attributes inherited from Lingo::Attendee
Instance Method Summary collapse
- #control(cmd) ⇒ Object
-
#init ⇒ Object
TODO: FILE/LIR-FILE (?).
Methods inherited from Lingo::Attendee
#command, #forward, #initialize
Constructor Details
This class inherits a constructor from Lingo::Attendee
Instance Method Details
#control(cmd) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/lingo/attendee/text_reader.rb', line 123 def control(cmd, *) return unless cmd == :TALK command(:LIR) if @lir @files.each { |path| command(:FILE, path) io = stdin?(path) ? open_stdin : open_path(name = path) Progress.new(self, @progress && io.size, name) { |progress| pos = 0 unless pos?(io = filter(io, path, progress)) io.each { |line| progress << offset = pos ? pos += line.bytesize : io.pos line =~ @skip ? nil : line =~ @lir ? command(:RECORD, $1 || $&) : begin line.sub!(@cut, '') if @cut forward(line, offset) unless line.empty? end } } io.close unless stdin?(path) command(:EOF, path) } command(:EOT) :skip_command end |
#init ⇒ Object
TODO: FILE/LIR-FILE (?)
110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/lingo/attendee/text_reader.rb', line 110 def init get_files @encoding = get_enc @filter = get_key('filter', false) @progress = get_key('progress', false) @lir = get_re('records', nil, %r{^\[(\d+)\.\]}) @cut = get_re('fields', !!@lir, %r{^.+?:\s*}) @skip = get_re('skip', nil) end |