ruby
  • string
  • 2010-06-10 2 views 1 likes 
    1

    문자열에 포함 된 개행 문자가 모두 포함 된 방식으로 파일에 루비 문자열을 쓰려고합니다. 이것은 다른 도구에 의해 처리 될 파일에 기록됩니다.ruby ​​개행 문자를 파일에 쓰지 만 실제 개행 문자로 해석하지 않습니다.

    아래 예가 있습니다.

    I want this: 1 [label="this is a\ntest"] \n (second \n is a true newline) 
    I have tried this: string = '1 [label="this is a\ntest"]' + "\n" 
    

    의견이 있으십니까?

    +0

    그리고 시도한 방식으로 작동하지 않는 것은 무엇입니까? –

    +0

    위의 예제에서 첫 번째 줄 바꿈은 하류 처리 도구에서 실제 줄 바꿈으로 읽습니다. 텍스트 편집기에서 열 경우에도 마찬가지입니다. 하지만 텍스트 편집기로 들어가서 \ n을 입력하면 텍스트로 유지됩니다. 개행이 아닙니다. 여하튼 전체 개행 문자를 피하려고합니다. – thomas

    답변

    2

    나는 그것을 알아 냈다. 내가 word_wrap 도우미 함수를 사용하여 텍스트를 줄 바꿈하고 "\ n"이 아니라 '\ n'을 사용하고있었습니다. 나는 그 기능을 복사하고 내 것을 썼다.

    이제 가야합니다.

    0

    위 예제의 첫 번째 줄 바꿈은 다운 스트림 처리 도구에서 실제 줄 바꿈으로 읽습니다.

    다음은 문제가있는 것 같습니다. 처리 도구는 리터럴 꺽쇠 (aka \ x5c \ x6e)를 가져 와서 하나의 \ x0a로 번역합니다.

    즉, 출력 프로세스는 괜찮습니다. 입력 프로세스가 안전하지 않습니다. 다음과 같이 문자열을 확인할 수 있습니다.

    string.split(//).map {|x| x[0].ord.to_s(16)} 
    

    끝에 "a"가 하나 있습니다.

    1

    루비에서는 작은 따옴표로 이스케이프 시퀀스를 해석하지 않습니다. 견적 연산자를 사용할 수 있습니다.

    string = %Q/1 [label="this is a\\ntest"] \n/ 
    

    % Q 뒤에있는 문자는 문자열 시작, 끝 구분 기호입니다. 루비는 지적인 친밀감을 가진 페어 화 된 문자를 지능적으로 사용합니다. 예 :

    string = %Q{1 [label="this is a\\ntest"] \n} 
    string = %Q(1 [label="this is a\\ntest"] \n) 
    string = %Q!1 [label="this is a\\ntest"] \n! 
    

    이렇게하면 특정 문자열 리터럴에 대한 추가 이스케이프가 필요하지 않은 편리한 구분 기호를 선택할 수 있습니다.

    관련 문제