Ruby로 캐리지 리턴을 제거하려면 어떻게해야합니까?
이 코드가 작동한다고 생각했지만 정규식이 \ r \ n과 일치하지 않습니다. 16 진 편집기에서 읽고있는 데이터를보고 파일에 실제로 16 진 D 및 16 진 A 패턴이 있는지 확인했습니다.
나는 또한 정규식 / \ xD \ xA / m 및 / \ x0D \ x0A / m을 시도했지만 일치하지 않았습니다.
이것은 지금 내 코드입니다.
lines2 = lines.gsub( /\r\n/m, "\n" )
if ( lines == lines2 )
print "still the same\n"
else
print "made the change\n"
end
대안 외에도 내가 뭘 잘못하고 있는지 아는 것이 좋을 것입니다 (내가 배우는 것을 촉진하기 위해). :)
당신이 할 때 당신은 무엇을 얻 puts lines
습니까? 그것은 당신에게 단서를 줄 것입니다.
기본적으로 File.open
파일은 텍스트 모드로 열리므로 \r\n
문자는 자동으로 \n
. 아마도 그 이유 lines
는 항상 lines2
. Ruby가 줄 끝을 구문 분석하지 못하도록하려면 다음 rb
모드를 사용하십시오 .
C : \> lala.txt 복사 ㅏ 파일 와 많은 윤곽 ^ Z C : \> irb irb (main) : 001 : 0> text = File.open ( 'lala.txt'). read => "\ n 파일 \ n \ nmany \ n 줄 \ n" irb (main) : 002 : 0> bin = File.open ( 'lala.txt', 'rb'). read => "a \ r \ n 파일 \ r \ n \ r \ nmany \ r \ n 줄 \ r \ n" irb (main) : 003 : 0>
그러나 귀하의 질문과 코드에서 기본 수정 자로 파일을 열면됩니다. 변환이 필요하지 않으며 더 짧은 File.read
.
사용 문자열 # 스트립
선행 및 후행 공백이 제거 된 str의 복사본을 반환합니다.
예 :
" hello ".strip #=> "hello"
"\tgoodbye\r\n".strip #=> "goodbye"
gsub 사용
string = string.gsub(/\r/," ")
string = string.gsub(/\n/," ")
일반적으로 스트리핑 \ r 또는 \ n을 다룰 때 다음과 같이 두 가지를 모두 찾습니다.
lines.gsub(/\r\n?/, "\n");
나는 데이터가 어떻게 저장되었는지에 따라 (사용 된 OS, 사용 된 편집기, 당시의 Io에 대한 Jupiter의 관계) 캐리지 리턴 후 줄 바꿈이있을 수도 있고 없을 수도 있다는 것을 발견했습니다. 16 진수 모드에서 두 문자를 모두 보는 것이 이상하게 보입니다. 도움이 되었기를 바랍니다.
modified_string = string.gsub(/\s+/, ' ').strip
Rails를 사용하는 경우 squish
방법이 있습니다.
"\tgoodbye\r\n".squish => "goodbye"
"\tgood \t\r\nbye\r\n".squish => "good bye"
lines2 = lines.split.join("\n")
"still the same\n".chomp
또는
"still the same\n".chomp!
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-chomp
다음은 어떻습니까?
irb(main):003:0> my_string = "Some text with a carriage return \r"
=> "Some text with a carriage return \r"
irb(main):004:0> my_string.gsub(/\r/,"")
=> "Some text with a carriage return "
irb(main):005:0>
또는...
irb(main):007:0> my_string = "Some text with a carriage return \r\n"
=> "Some text with a carriage return \r\n"
irb(main):008:0> my_string.gsub(/\r\n/,"\n")
=> "Some text with a carriage return \n"
irb(main):009:0>
바이너리 모드가 아닌 텍스트 모드에서 파일을 읽어 보지 않겠습니까?
정규식이 거의 완료되었다고 생각합니다. 여기에 내가 할 일이 있습니다.
lines2 = lines.gsub(/[\r\n]+/m, "\n")
In the above, I've put \r and \n into a class (that way it doesn't matter in which order they might appear) and added the "+" qualifier (so that "\r\n\r\n\r\n" would also match once, and the whole thing replaced with "\n")
Just another variant:
lines.delete(" \n")
You can use this :
my_string.strip.gsub(/\s+/, ' ')
lines.map(&:strip).join(" ")
def dos2unix(input)
input.each_byte.map { |c| c.chr unless c == 13 }.join
end
remove_all_the_carriage_returns = dos2unix(some_blob)
참고URL : https://stackoverflow.com/questions/287713/how-do-i-remove-carriage-returns-with-ruby
'Development Tip' 카테고리의 다른 글
google-places-api를 사용하는 간단한 HTML 페이지에 대한 ApiNotActivatedMapError (0) | 2020.10.30 |
---|---|
UIView의 위치를 변경하는 간단한 방법? (0) | 2020.10.30 |
Mac Spark-shell 오류 초기화 SparkContext (0) | 2020.10.30 |
C / C ++에서 배열을 복사하는 기능이 있습니까? (0) | 2020.10.30 |
ImageView가 동적 너비를 가진 정사각형입니까? (0) | 2020.10.30 |