ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [RegExp] .NET-Captures in Ruby
BeitragVerfasst: 10 Aug 2006, 17:02 
Offline
Geselle

Registriert: 22 Feb 2005, 13:38
Beiträge: 129
Wohnort: Berlin, Lyon, Europa und Welt
Hallo,

ich suche verzweifelt die Capture-Collection aus .NET in Ruby. Das MatchData-Objekt kennt zwar 'captures', das sind aber soweit ich das sehe das selbe wie 'Groups' in .NET. Dementsprechend kann ich folgenden Code nicht portieren:



1
2
3
4
5
6
7
8
9
10
11
12
13
string current_path = new System.IO.DirectoryInfo(".").FullName + '\\';

foreach (FileInfo f in new System.IO.DirectoryInfo(".").GetFiles()) {
string new_name = Regex.Replace(
f.Name, @"^([^.]*)(\.[^.]*)*(\..*)$", delegate (Match m) {
string ret = m.Groups[1].Value;
foreach (Capture c in m.Groups[2].Captures)
ret += c.Value.Replace('.', ' ');
return ret + m.Groups[3].Value;
}
);
File.Move(f.FullName, current_path + new_name);
}


(Der Code geht alle Dateien des aktuellen Verzeichnisses durch und ersetzt alle Punkte in Dateinamen, bis auf den letzten (Punkt) durch ein Leerzeichen.)

Habe ich Tomaten auf den Augen oder geht das so nicht? Das Problem an sich zu implementieren ist natürlich kein Problem, es gehr mir lediglich darum, ob man es als RegExp-One-Liner machen kann (das da oben ist genau genommen nur eine Zeile).

_________________



self.vote :berlingruen
· http://gruene-berlin.de/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 10 Aug 2006, 17:37 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
Wenn ich Dich richtig verstanden habe geht es darum alle Matches einer Gruppe der Form (irgendwas)* nacheinander zu verarbeiten. Das ist eine .NET-Spezialität, die es in Ruby nicht gibt.

Dein Problem lässt sich aber lösen (auch im Prinzip ein Einzeiler)

1
2
3
4
def changedirs(dir = '.')
Dir.new(dir).each{|f|yield f.gsub(/\.(?=.*\.)/, ' ')}
end
changedirs('Erlang'){|fnew|puts fnew}
ergibt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.
.
course
course.pdf
course tar.gz
download-Dateien
download.html
erlang-book-part1.pdf
Erlang-Wikipedia-Dateien
Erlang-Wikipedia.htm
ErlangOrgPage-Dateien
ErlangOrgPage.htm
Erlang_Papier-v2 2.pdf
erl_spec47.pdf
erl_spec47.ps
erl_spec47 ps.gz
ll2_2002.pdf
otp_doc_html_R11B-0 tar.gz
otp_src_R11B-0
otp_src_R11B-0.readme
otp_src_R11B-0 tar.gz
otp_win32_R11B-0.exe
uri.txt
white_paper.html

Du müsstest nur noch die beiden Sonderfälle (. und ..) ausklammern.

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 10 Aug 2006, 19:03 
Offline
Geselle

Registriert: 22 Feb 2005, 13:38
Beiträge: 129
Wohnort: Berlin, Lyon, Europa und Welt
WoNáDo hat geschrieben:
Wenn ich Dich richtig verstanden habe geht es darum alle Matches einer Gruppe der Form (irgendwas)* nacheinander zu verarbeiten. Das ist eine .NET-Spezialität, die es in Ruby nicht gibt.

Schade, dachte ich mir. Ist geplant, das irgendwann hinzuzufügen?

Zitat:



f.gsub(/\.(?=.*\.)/, ' ')}

Jaa, das ist doch genau das, was ich gesucht habe. :-)
Ich kannte die '?='-Syntax nicht. Gibt es da irgendwo eine gute Referenz? Ich sehe jetzt erst, dass es das auch in .NET gibt.

Auf jeden Fall Danke.

_________________



self.vote :berlingruen
· http://gruene-berlin.de/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 10 Aug 2006, 20:09 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
Konrad L. M. Rudolph hat geschrieben:
Schade, dachte ich mir. Ist geplant, das irgendwann hinzuzufügen?

Keine Ahnung - habe ich noch nichts drüber gelesen. Lässt sich aber eventuell in Oniguruma unterbringen. Mal nachfragen.

Konrad L. M. Rudolph hat geschrieben:
Ich kannte die '?='-Syntax nicht. Gibt es da irgendwo eine gute Referenz?.

Ich hoffe gut :D Reguläre Ausdrücke, Teil 3: Zukunftsaussichten und die Jagd nach Feten - von WoNáDo

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 03 Nov 2006, 13:28 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
WoNáDo hat geschrieben:
Wenn ich Dich richtig verstanden habe geht es darum alle Matches einer Gruppe der Form (irgendwas)* nacheinander zu verarbeiten. Das ist eine .NET-Spezialität, die es in Ruby nicht gibt.

Ich habe das erledigte Thema hierhin verschoben, weil es ja letztendlich um eine Anfrage an Oniguruma geht...

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: