On 8/23/06, Cameron, Gemma (UK) <Gemma.Cameron / baesystems.com> wrote: > OK so no one has used ruby to drive clearcase... might have to be a > pet project to create a gem for this; gem's gem. heh This isn't all that surprising -- ClearCase is hella expensive and the last time that I dealt with it was eight years ago. No other company I've worked for uses it. > Now my problem is a very simple one and I don't seem to be typing the > right things into google or looking up the right things in anvil to > find it so I thought I could ask you guys for some ideas... > Problem: > I want to parse the STDIN generated when I do a clearcase update and > for every line that contains: > Loading "path_to_a_file.txt" (0 bytes) > What I want to get from this line is the filename (stuff in the > quotes) so I can send it to a method to be zipped. Initially before > I try to zip the file it would be nice to do some debugging by > printing the filenames into a text file. This is what I have so far: > > def updateView > Dir.chdir("f:") > Dir.chdir(getPathToView) > system("cleartool update -rename #{getPathToView}") if viewCreated? > parseOutput > print "\nUpdated #{getPathToView}\n" > end > > def parseOutput > $stdin.each { |line| > if line =~ [^Loading] > file = line.match(/".*"/) > zipUp(file) > puts "matched!" > end > } > end > > def zipUp(file) > Zip::ZipFile::open("updated.zip", true) { |zf| > zf.add(file, file) > } > end A couple of things. It is common Ruby parlance to use underscores in method names instead of interCaps. So updateView would become update_view. Second, in your updateView, where are you getting the "getPathToView" value? Is it another method (like #viewCreated?)? Also, you probably want to use a pipe -- I haven't done this on Windows -- so look at popen if it'll work on Windows. Otherwise, do: def update_view(path_to_view, drive = nil) Dir.chdir("#{drive}#{path_to_view}") do |dir| if view_created?(path_to_view) output = `cleartool update -rename #{path_to_view}` parse_output output puts "\nUpdated #{path_to_view}" end end end def parse_output(input) input.split($/).each do |line| if line =~ %r{^Loading} # or /^Loading/ file = line.split(//)[1] zip_up(file) puts "Matched #{file}" end end end def zip_up(file) Zip::ZipFile::open("updated.zip", true) { |zf| zf.add(file, file) } end Not tested, obviously, since I don't have CC. -austin -- Austin Ziegler * halostatue / gmail.com * http://www.halostatue.ca/ * austin / halostatue.ca * http://www.halostatue.ca/feed/ * austin / zieglers.ca