2017-02-20 3 views
-2

Ich habe ein Ruby-Skript implementiert, das & erzeugen sollte, fügen Sie einen Standard-Code Stücke an den richtigen Stellen. Das Problem besteht darin, dass einige dieser Codeteile die alphabetische Reihenfolge des vorhandenen Codes berücksichtigen müssen.regex ein Wort in einen Text in alphabetischer Reihenfolge einfügen

Als Beispiel davon aus, dass wir einen Code Stück für Wort ‚Daumen‘ (in diesem Fall wäre es UPDATEFIELD((&(thumb)), ([custominputstream readString])); sein) einfügen müssen in den folgenden Code:

//... 
    UPDATEFIELD((&(answers)), ((ListTO *)[custominputstream readCustomSerializable])); 
    UPDATEFIELD((&(text)), ([custominputstream readString])); 
    UPDATEFIELD((&(title)), ([custominputstream readString])); 
    //... 

Das gewünschte Ergebnis:

//... 
    UPDATEFIELD((&(answers)), ((ListTO *)[custominputstream readCustomSerializable])); 
    UPDATEFIELD((&(text)), ([custominputstream readString])); 
    UPDATEFIELD((&(thumb)), ([custominputstream readString])); //here is the right place to do it. 
    UPDATEFIELD((&(title)), ([custominputstream readString])); 
    //... 

Die Frage ist, wie für Texteinblendung mit regex diesen genauen Ort zu finden,/ist es überhaupt möglich?

+0

Zeig uns, was du schon versucht hast. – mudasobwa

+0

@mudasobwa Ich habe nichts in Bezug auf mein Problem in der Dokumentation gefunden, also gibt es nichts zu zeigen. – nrx

+0

Bei der Programmierung geht es nicht darum, Lösungen von docs/SO zu kopieren, sondern um Probleme zu lösen. – mudasobwa

Antwort

0

Ihre aktuelle Reihenfolge der Worte ist

answers < text < title 

Ein Ansatz zur Problem kann die Datei von oben liest und es in der Mitte zu brechen.

in Ihrem Fall die

UPDATEFIELD((&(text)), ([custominputstream readString]));

ist lesen Sie die

/(?<=UPDATEFIELD\(\(&\()\w+(?=\))/ String , die nichts anderes ist als text

und vergleichen sie dann mit Ihrem Wort. Welche in Ihrem Fall thumb

if 'thumb' < 'text' 
    #place it above text 
else #(which is obvious) then 
    #place it below 
end 

der Auftrag wird

answers < text < thumb < title 

Ihre Datei ist ziemlich groß zu sein, geschieht also die gleiche Übung wiederholen, die Sie benötigen, bis Sie Ihr Ziel erreichen.

wir tun eine binary search um den Ort zu erreichen, wo wir unser Wort einfügen müssen.

+0

Danke für so eine schnelle Antwort, scheint genau das, was ich brauche! Jetzt brauche ich etwas Zeit, um es anzuwenden, denn ich bin ein totaler Noob sowohl in Regex und Rubin; Ich schreibe zurück + akzeptiere die Antwort so schnell wie möglich :) – nrx

+0

hmm ... Ich kann nicht bekommen, wie man eine Zeile direkt über/unter die Zeile mit der Übereinstimmung einfügt. Bisher habe ich in solchen Fällen diesen Ansatz verwendet 'def dataAppendTo (methodName, string, data, bottomEdge) \t return data_(*.*#{methodName}.*\n)((**n) *?) (. * # {bottomEdge}. *) /, '\ 1 \ 2' + string + ' \ 4' ende um neue Zeilen einzufügen, aber hier scheint es nicht anwendbar zu sein. – nrx

+0

Ich denke, eine einfache Möglichkeit wäre, Ihre Datei als String zu lesen und auf '\ n' oder '\ n \ r' aufzuteilen und den Index des gewünschten Wortes zu finden und ein neues Wort mit 'array einzufügen. Einfügen (Index, Wort) 'Hoffen, das hilft – aelor

Verwandte Themen