Development Tip

Ruby로 캐리지 리턴을 제거하려면 어떻게해야합니까?

yourdevel 2020. 10. 30. 21:10
반응형

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

반응형