2013-10-07 3 views
0

텍스트 파일을 검색하고 사용자가 입력 한 변수와 일치하는 모든 문자열 줄을 반환하는 작은 콘솔 프로그램을 만들었습니다. 내가 겪었던 한 가지 문제는 위치 코드를 나타내는 "1234"를 조회하고 싶지만 문자열 줄에 "555-1234"라는 전화 번호가 있기 때문에 그 번호도 다시받습니다. 변수 (", 1234,")를 사용하여 구분 기호 (예 : ",")를 입력하면 검색이 정확한지 확인할 수 있습니다. 나는 바른 길에 있습니까, 아니면 더 좋은 방법이 있습니까? CSV에문자열 구분 기호 문자로 검색

string[] file = File.ReadAllLines(sPath); 
    foreach (string s in file) 
    { 
     using (StreamWriter sw = File.AppendText(rPath)) 
     { 
      if (sFound = Regex.IsMatch(s, string.Format(@"\b{0}\b", 
       Regex.Escape(searchVariable)))) 
      { 
       sw.WriteLine(s); 
      } 
     } 
    } 
+0

CSV 파일이 있습니까? – Ryan

+0

대부분의 경우 CSV 파일이되지만 때로는 파이프 또는^구분 된 파일을 찾게되므로 사용자가 시작 부분에 구분 기호를 입력하게 할 수도 있습니다. – Mikem

+2

Linq를 사용하여 CSV를 작성하고 더 쉽게 사용할 수 있습니다. Nuget으로 가서 Linq를 CSV로 검색하십시오. – jcwrequests

답변

0

나는 옳은 길을 가고 있다고 말하고 싶습니다.

"-"로 시작하지 않는 "searchVariable"과 일치하도록 negative lookbehind을 사용하도록 정규 표현식을 변경하면 "555-1234"의 "1234"는 일치하지 않지만 " , 1234 "(예를 들면).

질문에서 원하지 않는 특수 정규식 문자를 검색에 포함시키려는 경우에만 "Regex.Escape()"을 사용해야합니다.

당신은 (늦은 그래서이 테스트를하지 않은 것!) 이런 식으로 뭔가에 코드를 변경할 수 있습니다 : (! 종종 까다로운)

var lines= File.ReadAllLines(sPath); 
var regex = new Regex(String.Format("(?<!-){0}\b", searchVariable)); 

if (lines.Any()) 
{ 
using (var streamWriter = File.AppendText(rPath)) 
{  
    foreach (var line in lines) 
    { 
    if (regex.IsMatch(line)) 
    { 
    streamWriter.WriteLine(line); 
    } 
    } 
} 
} 

이러한 정규 표현식을 테스트하기위한 좋은 웹 사이트는 Regex Hero입니다.

+0

사용자 입력 변수를 정규식 변수에 통합하는 방법은 무엇입니까? – Mikem

+0

@ user2836200 사용자가 입력 한 변수가 포함되도록 정규 표현식을 업데이트했습니다. 또한 "555-1234"의 "-"는 일치하지 않지만 ", 1234"는 (예를 들어) 일치하도록 정규 표현식을 변경했습니다. –

+0

EEK! String.Format을 추가하는 것을 잊어 버리는 이유는 변수를 추가하는 것이 저에게 효과가 없을 것입니다. 나는 의견을 주셔서 감사하지만 업데이트 된 Regex는 문자열 라인에 ", 32541234"라고 쓰면 추가 문자열을 가져옵니다. 구분 기호 사이에있는 항목 만 일치시킬 수 있으면 매번 정확할 것이라고 생각합니다. – Mikem

0

사용 Linq에, 여러분의 인생을 더 쉽게 만드는 : 지금까지에서 나는 곳이다. Nuget으로 가서 Linq를 CSV로 검색하십시오.

+0

저는 코드 작성에 익숙하지 않아서 linq를 CSV로 들여다 보았지만 그걸로 아무 것도 할 수 있을지 모르겠습니다. – Mikem

+0

이 링크를 클릭하십시오. http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library – jcwrequests

+0

감사합니다. – Mikem

관련 문제