2012-06-15 3 views
2

스트림의 라인을 읽을 때 (실제로 COM 포트의 스트림입니다), 반환 된 문자열에는 \ n 또는 \ r 문자 (또는 \ r \ n 조합)가 포함되지 않습니다. 로깅 목적으로, 나는 그들을 유지하고 싶습니다. 현재 내 루프는 다음과 같습니다C# 캐리지 리턴 및 줄 바꿈 줄을 어떻게 유지하고 유지합니까?

while (newPort.BytesToRead > 0) 
{ 
    received = ReadLine(newPort); 

    response.Add(received); 
} 

을 그래서 기본적으로 내가 "응답"이라는 문자열 목록에 추가 한 후 문자열을 읽고 있어요. 내가 원했던 것은 리턴 된 문자열`received '가 원래의 스트림에 있던 \ r 또는 \ n 또는 \ r \ n을 포함하고 텍스트 줄을 끝내는 것입니다.

이것은 가능한가? 아니면 심지어 trivially!

감사합니다.

나는 이것이 매우 어렵다고 생각합니다. 나는 그것에 대해 생각하는 것을 의미합니다, 만약 내가 \ r을 받았다면, 나는 그것이 다음 문자인지 알아야만합니다. \ n. 다음 문자가 없으면 예외가 발생하여 시간 초과됩니다. 다음 문자가 있고 \ n이 아닌 경우 다음 반복에서 현재 문자로 만들어야합니다.

좋아, 나는 그것에 균열이 있었다. 여기에 내가 옳다고 생각입니다 ... :

  { 
       int s = 0, e = 0; 

       for (; e < line.Length; e++) 
       { 
        if (line[e] == '\n') 
        { 
         // \n always terminates a line. 

         lines.Add(line.Substring(s, (e - s) + 1)); 

         s = e + 1; 
        } 
        if (line[e] == '\r' && (e < line.Length - 1)) 
        { 
         // \r only terminates a line if it isn't followed by \n. 

         if (line[e + 1] != '\n') 
         { 
          lines.Add(line.Substring(s, (e - s) + 1)); 

          s = e + 1; 
         } 
        } 
       } 

       // Check for trailing characters not terminated by anything. 

       if (s < e) 
       { 
        lines.Add(line.Substring(s, (e - s))); 
       } 
      } 
+0

왜 그냥 수동으로 http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx와 문자열의 끝에 줄 바꿈을 추가하지 마십시오 – Tudor

답변

2

당신은 received를 추가 한 후 Environment.NewLine을 추가 할 수있다.

업데이트 원래 공백을 그대로 유지해야하는 경우 ReadLine을 사용하면 아무런 의미가 없습니다. 이 경우 ReadBlock을 사용하여 작은 파일 덩어리를 읽거나 전체를 얻으려면 ReadToEnd을 사용할 수 있습니다. 메시지 처리를 위해 새 줄을 표시해야하는 경우 원시 문자열을 검색하여 정규화하거나 토큰 화하거나 원하는 모든 작업을 수행 할 수 있습니다.

+1

내가 원하는 단일 \ n, 단일 \ r 또는 \ r \ n 조합을 받았는지 확인하십시오. 로깅 목적으로 COM 포트가 어떤 문자를 보내고 있는지 정확히 아는 것이 중요합니다. – Robinson

+0

예 HBC, 저는 잠시 전에 이것을 깨달았으며 ReadChar로 그 기능을 수행했습니다. 아직 테스트 해봐야하지만 사소한 일은 없다고 생각합니다. – Robinson

0
while (newPort.BytesToRead > 0) 
{ 
    received = ReadLine(newPort); 

    response.Add(string.Format("{0}{1}", received, System.Environment.Newline); 
} 
+0

HackedByChinese에게 내 답장을 읽어주세요. 나는 그 질문이 충분히 분명하다고 생각한다. :) – Robinson

관련 문제