用于ruby输出到文件的Windows友好的换行符

时间:2017-03-29 04:34:21

标签: windows file-io notepad++ gsub ruby-2.2

我有一个要解析的测试结果日志,基本上只是序列行上的一对key=value对,最后用//分隔。

除输出文件外,一切似乎都很棒。在普通的记事本中,它看起来很好。在Notepad ++中,它有一堆额外的行。从输出文件中查看符号时,原始文件行以CR结尾,而全部空白的新行将注入CRLF

它的输入文件在两者中都是相同的,所有行都以CRLF结尾。我希望它的输出文件看起来都一样。

我需要针对所需的行为修复什么?我尝试添加一个gsub来删除第一次替换contents = contents.gsub(/^\n/m, "")后空白的行,但这似乎不会改变输出。

输入文件,test_results.log:

// 
Test_App=moduleTwo_test.exe 
Test_Function=genericTestOne() 
Test_Iterations=5 
Test_Health=100 %  
Test_Result=PASSED   
Test_Path=C:\rb-tests\moduleTwo_test.exe 
// 
Test_App=subModuleOne_test.exe 
Test_Function=iAlwaysFail() 
Test_Iterations=5 
Test_Failures=5     
Test_Health=0 %  
Test_Result=FAILED   
Retest_Iterations=20 
Retest_Failures=20 
Retest_Health=0 %  
Retest_Result=FAILED   
Test_Path=C:\rb-tests\subModuleOne_test.exe 
// 
Test_App=subModuleOne_test.exe 
Test_Function=genericTestOne() 
Test_Iterations=5 
Test_Health=100 %  
Test_Result=PASSED   
Test_Path=C:\rb-tests\subModuleOne_test.exe 
//

Ruby Script,find_fails.rb

this_dir = File.dirname(ARGV[0])
this_file = File.open(ARGV[0], "rb")
contents = this_file.read
contents = contents.gsub(/\/\/[ ](?>(?:(?!\/\/).))*?PASSED.*?(?=\/\/)/m, "")
contents = contents.gsub(/^\n/m, "")
File.write(this_dir + "\\fails.log", contents)

输出文件,fails.log,如Notepad ++中所示

// 

Test_App=subModuleOne_test.exe 

Test_Function=iAlwaysFail() 

Test_Iterations=5 

Test_Failures=5     

Test_Health=0 %  

Test_Result=FAILED   

Retest_Iterations=20 

Retest_Failures=20 

Retest_Health=0 %  

Retest_Result=FAILED   

Test_Path=C:\rb-tests\subModuleOne_test.exe 

//

所需的fails.log输出文件/格式,以及它在普通记事本中的样子:

// 
Test_App=subModuleOne_test.exe 
Test_Function=iAlwaysFail() 
Test_Iterations=5 
Test_Failures=5     
Test_Health=0 %  
Test_Result=FAILED   
Retest_Iterations=20 
Retest_Failures=20 
Retest_Health=0 %  
Retest_Result=FAILED   
Test_Path=C:\rb-tests\subModuleOne_test.exe 
//

0 个答案:

没有答案