2017-04-26 19 views
-1

Ich verbrachte ein paar Stunden googeln, konnte aber keine genaue Antwort finden.Wenn Zeile Wort enthält, setze Zeile in Variable

Ich möchte eine mehrzeilige Textdatei durchsuchen, und wenn eine Zeile 'dog' enthält, lege diese Zeile in eine Variable.

Hier ist der Code, den ich habe:

if File.foreach('textfile.txt').grep(/dog/) 

würde ich die nächste Codezeile wie die Linie 'dog' in die Variable wordline enthält, zu setzen.

Ich könnte auch nach mehreren Begriffen suchen, anstatt nur einer, das heißt:

if File.foreach('textfile.txt').grep(/cat|dog/) 

ich es realisieren könnte auch auf andere Art und Weise erfolgen, so etwas wie:

wordline=File.foreach('textile.txt').grep(/dog/) 

aber ich don kenne die Syntax für diese Inline-Version nicht.

Edit: das ist mein erster Beitrag überhaupt und ich bin ein Ruby newb .. was ich in meinem Beitrag erwähnt habe. Aber irgendjemand hat alles bearbeitet, dass mein Post abstimmte. Ich habe die FAQ vor dem Posten gelesen, daher wäre eine Erklärung der kritischen Aktionen beim nächsten Mal willkommen.

+0

Als eine Anmerkung gibt 'grep' immer ein Array zurück, und Arrays, auch leere, sind immer logisch wahr. Dieses 'if' wird niemals nicht feuern. – tadman

Antwort

0

hier würde die allgemeine Idee:

matching = File.readlines('text.txt').grep(/dog|cat/) 

Oder allgemeiner:

terms = %w[ dog cat ] 

matching = File.readlines('text.txt').grep(Regexp.union(terms)) 

Seit matching ist ein Array Sie Elemente in es wie matching[0] oder matching.first oder iterieren darauf verweisen kann dann notwendig, wenn mit .each. So weisen Sie einer Variablen die erste Übereinstimmung zu:

+0

Danke, das ist die Syntax, die ich wollte. Mein Test hat funktioniert und ich habe die Zeile mit dem gewünschten Wort erhalten. Es scheint jedoch, dass die Zeilen dieser Datei am Anfang stehen. Und manchmal \ n am Ende. Gibt es eine Möglichkeit, diese \ t \ n Zeichen mit der gleichen einzeiligen Syntax zu entfernen? dh so, dass es funktionieren würde wie: Matching = File.readlines ('text.txt') grep (/ Hund | cat /) entfernen '\ n' und '\ t' Oder vielleicht werde ich einfach haben. um eine zweite Variable aus "Matching" zu machen, wobei die Tabs und Zeilenumbrüche entfernt werden – Bman70

+0

Sie können Zeilenumbrüche wie 'File.readlines (...). map {| s | entfernen s.gsub (/ \ s + /, '')} 'zum Entfernen von Leerzeichen, Tabulatoren oder Zeilenumbrüchen. Sie können sich auch daran halten, wenn nötig. – tadman

+0

Das macht die Zeile unlesbar obwohl Leerzeichen zwischen Wörtern weg sind. Könnte ich .map {| s | verwenden s.gsub (/ \ t \ n /, '')} um neue Zeilen und Tabs zu entfernen? – Bman70

Verwandte Themen