2013-08-03 3 views
0

방법이 있습니까, 심지어 두 개의 연속 된 따옴표로 묶여 문자 또는 숫자로 둘러싸인 쉼표를 제거하는 정규식을 말할까요?직접 문자 또는 숫자 사이 또는 쉼표를 제외하고 쉼표를 제거 하시겠습니까?

확실하지 여기에서이 내가 CSV 도우미보고 가기 전에 내 마지막 희망하는 그 밖의 무엇을 : 나는 DB에 텍스트 파일을 가져 비주얼 스튜디오 SSIS/BI를 사용하고

.

"축구 바위, 그래는 않습니다"

가이 문제를 해결하려면, 나는이 문제를 일시적으로 해결 방법을 바꾸기 사용 : 문제는 파일과 같은 데이터를 포함하는 경우 SSIS는 굄목 것입니다. Visual Studio BI/SSIS Script task에서이 코드를 실행하여 텍스트 파일을 CSV로 처리 한 후 DB로 보냅니다.

static void AddComma(string s, TextWriter writer) 
{ 
    foreach (var line in s.Replace(", ", "").Split(new string[] { Environment.NewLine}, StringSplitOptions.None)) 
    { 
     foreach (var t in line) 
     { 
      writer.Write(t); 
     } 
     writer.WriteLine(); 
    } 
    writer.Flush(); 
} 

static void Main(string[] args) 
{ 
    TextReader reader = new StreamReader(@"C:\sample\test.txt"); 
    string a = reader.ReadToEnd(); 
    reader.Close(); 

    FileStream aFile = new FileStream(@"C:\sample\test.csv", FileMode.Create); 
    AddComma(a, new StreamWriter(aFile)); 
    aFile.Close(); 
} 

참고 : 나는 하나의 공백 다음에 쉼표를 교체하고

Replace(", ", ""); 

텍스트 파일의 데이터는 다음과 같습니다 경우 문제는 다음과 같습니다

"축구 바위, 예, 있습니다. "

Replace 메서드는 분명히 그것을 catch하지 않습니다.

방법이 있습니까? 심지어 두 개의 연속 된 따옴표로 묶여 문자 또는 숫자로 묶인 쉼표를 제거하는 정규식이라고해도 될까요?

그래서 데이터는 다음과 같습니다 경우 : "축구 바위, 그래가 않습니다"또는 다음이처럼 끝날 것 "축구는 54,23이 예는 않습니다 바위"

"축구는 바위 네 그렇습니다" 나는 무엇이 가능하고 단순히 어떤 종류의 해결책을 찾고 있는지 확신하지 못한다.

+0

[**'LumenWorks Framework' **] (http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader) CSV 스타일 데이터를 구문 분석 할 수있는 라이브러리입니다. 당신의 예제는 이해가 안됩니다. ""축구 바위, 그렇습니다. ""당신이 언급 한 규칙에 따라 "축구 예"가 생성됩니다. – Prix

+0

아니요. 쉼표가 있으면 쉼표가 제거됩니다. 쉼표가있는 경우 즉시 편지 사이에 쉼표가 표시됩니다. 바위 & 예. 나는 이것이 가능할 것이라는 것을 암시하지 않는다. 나는 단지 가능한 것을 요구하고있다. – Asynchronous

+0

쉼표를 제거하면 보낸 데이터가 변경됩니다. 어쩌면 보낸 사람은 상관하지 않습니다. 어쩌면 보낸 사람이 걱정할 수도 있습니다. CSV를 올바르게 읽는 것은 단순히 쉼표로 구분하는 것보다 훨씬 복잡합니다.많은 사람들이 똑같은 필요를 느끼며 심지어 생각조차하지 않은 모서리 사건을 해결하기 위해 도서관을 만들었습니다. 그렇다면 왜 바퀴를 다시 만들어야합니까? – Corak

답변

1

this과 같은 의미입니까?

예인 경우 정규 표현식 ("[\w\s]*),([\w\s]*")이있는 정규 표현식을 사용하여 첫 번째 및 두 번째 그룹을 가져와 필요한 것을 얻을 수 있습니다.

C#을 사용하면 .net 엔진 정규 표현식을 사용하면 무한 반복 lookbehind를 사용할 수 있습니다.

다음과 같이 시도해 볼 수 있습니다. s.Replace("(?<="[\w\s]+),(?=[\w\s]+")","-")이므로 그룹 및 일치 항목을 가져올 필요없이 바꿀 수 있습니다.

+0

그래, 그럴 수도 있지만 두 번째 있지만 어쩌면 내가 하이픈을 추가해야합니다 : "Daft 펑크처럼 - 그들은 바위!" 어느 쪽이든,이 시점에서 나는 단지 지쳐 있습니다. :) – Asynchronous

+0

@UnaverageGuy 휴식을 취하,이 도움이 될 것입니다 –

+0

고마워 내 친구! – Asynchronous

관련 문제