Ruby 如何从另一种方法中获取结果

Ruby 如何从另一种方法中获取结果,ruby,Ruby,我有一个带有子目录的目录结构: ../../../../../MY_PROJECT/TEST_A/cats/ ../../../../../MY_PROJECT/TEST_B/dogs/ ../../../../../MY_PROJECT/TEST_A/tigers/ ../../../../../MY_PROJECT/TEST_A/elephants/ 每个文件都有一个以“.sln””结尾的文件: 这些文件包含特定于其目录的信息。我想做以下工作: 在每个子目录中创建一个文件“myfile.t

我有一个带有子目录的目录结构:

../../../../../MY_PROJECT/TEST_A/cats/
../../../../../MY_PROJECT/TEST_B/dogs/
../../../../../MY_PROJECT/TEST_A/tigers/
../../../../../MY_PROJECT/TEST_A/elephants/
每个文件都有一个以“.sln””结尾的文件:

这些文件包含特定于其目录的信息。我想做以下工作:

  • 在每个子目录中创建一个文件
    “myfile.txt”
    ,并向其写入一些字符串:

    ../../../../../MY_PROJECT/TEST_A/cats/myfile.txt
    ../../../../../MY_PROJECT/TEST_B/dogs/myfile.txt
    ../../../../../MY_PROJECT/TEST_A/tigers/myfile.txt
    ../../../../../MY_PROJECT/TEST_A/elephants/myfile.txt
    
  • 使用以下方法将
    “.sln”
    文件中的特定字符串复制到特定目录的
    myfile.txt

    def parse_sln_files
      sln_files = Dir["../../../../../MY_PROJECT/TEST_*/**/*.sln"]
      sln_files.each do |file_name|
        File.open(file_name) do |f|
          f.each_line { |line|
            if line =~ /C Source files ="..\\/                                   #"
              path = line.scan(/".*.c"/)
              puts path
            end
          }
        end
      end
    end
    
  • 我想这样做:

    def create_myfile
      Dir['../../../../../MY_PROJECT/TEST_*/*/'].each do |dir|
        File.new File.join(dir, 'myfile.txt'), 'w+'
        Dir['../../../../../TEST/TEST_*/*/myfile.txt'].each do |path|
          File.open(path,'w+') do |f|
            f.puts "some text...."
            f.puts "some text..."
            f.puts # here I would like to return the result of parse_sln_files
          end
        end
      end
    end
    
    def parse_sln_and_store_source_files
      sln_files = Dir["../../../../../MY_PROJECT/TEST_*/**/*.sln"]
      sln_files.each do |file_name|
    
        #### Lets collect source file names in this array
        source_file_names = []
    
        File.open(file_name) do |f|
          f.each_line { |line|
            if line =~ /C Source files ="..\\/                                  #"
              path = line.scan(/".*.c"/)
    
              ############ Add path to array ############
              source_file_names << path
            end
          }
        end
    
        #### lets create `myfile.txt` in same dir as that of .sln     
        test_file = File.expand_path(File.dirname(file_name)) + "/myfile.txt"
    
        File.open(test_file,'w+') do |f|
            f.puts "some text...."
            f.puts "some text..."
    
            ##### Iterate over source file names & write to file
            source_file_names.each { |n| f.puts n }
        end
    
      end
    end
    

    关于如何表达这一点,

    < p>似乎你想从VisualC++解决方案文件中读取C文件名列表,并将其存储在同一目录中的一个单独文件中。您可能需要合并代码中显示的两个循环,并执行以下操作:

    def create_myfile
      Dir['../../../../../MY_PROJECT/TEST_*/*/'].each do |dir|
        File.new File.join(dir, 'myfile.txt'), 'w+'
        Dir['../../../../../TEST/TEST_*/*/myfile.txt'].each do |path|
          File.open(path,'w+') do |f|
            f.puts "some text...."
            f.puts "some text..."
            f.puts # here I would like to return the result of parse_sln_files
          end
        end
      end
    end
    
    def parse_sln_and_store_source_files
      sln_files = Dir["../../../../../MY_PROJECT/TEST_*/**/*.sln"]
      sln_files.each do |file_name|
    
        #### Lets collect source file names in this array
        source_file_names = []
    
        File.open(file_name) do |f|
          f.each_line { |line|
            if line =~ /C Source files ="..\\/                                  #"
              path = line.scan(/".*.c"/)
    
              ############ Add path to array ############
              source_file_names << path
            end
          }
        end
    
        #### lets create `myfile.txt` in same dir as that of .sln     
        test_file = File.expand_path(File.dirname(file_name)) + "/myfile.txt"
    
        File.open(test_file,'w+') do |f|
            f.puts "some text...."
            f.puts "some text..."
    
            ##### Iterate over source file names & write to file
            source_file_names.each { |n| f.puts n }
        end
    
      end
    end
    
    def解析和存储源文件
    sln_files=Dir[”../../../../../../../MY_PROJECT/TEST.*/***.sln“]
    sln_files.each do| file_name|
    ####让我们在此数组中收集源文件名
    源文件名=[]
    File.open(文件名)do | f|
    f、 每条{线|
    如果line=~/C Source files=“..\\/#”
    路径=行扫描(/“*.c”/)
    ############将路径添加到数组############
    
    源文件名太棒了!这正是我想要的!