2013-10-28 2 views
0

정말 쉬운 질문이지만 인터넷에서 모든 게시물을 읽은 것 같지만 문제를 해결할 수있는 방법을 찾지 못했습니다. Java에 stringtokenizer가 있지만 C#으로되어 있다는 것을 알고 있습니다. 내가하고 싶은 건이다 나는이처럼 보이는 TEXTFILE을 가지고 :텍스트 파일의 공백을 삭제하고 텍스트를 읽음 C#

ProductNr ProductName   CustomerNr  Customer 
AAAAA  Shoes    S111   Shoebuyer 
BBBBB  Umbrella   U222   Umbrellabuyer 

그렇게 내가 .Split (\의 t)를 messedup 사용할 수있는의 tabindex를 볼 수 있으며 나 또한 가지고 .Slip ('')을 시도했지만 공간이있는 부분 만 분할합니다. 내가하고 싶은 일은 단어 사이의 모든 공백을 삭제하고 AAAAA Shoes S111 Shoebuyer를 읽은 다음 다음 행에서 똑같은 것을 읽는 것입니다.

텍스트 파일을 변경하여 (,)로 분리 한 다음 아래 코드를 작성했습니다. 이것은 쉼표에 대해 작동하지만 내 문제 에이 문제를 적용하지 못했습니다. 내 질문에 다음

public string ProductNr { set; get; } 
public string Product { set; get; } 
public string CustomerNr { set; get; } 
public string Customer { set; get; } 

, 내가 TEXTFILE의 모든 텍스트를 읽는 방법은 다음과 같습니다

using (StreamReader file = new StreamReader("MyTestFile.txt")) 
      { 
       string line; 
       while ((line = file.ReadLine()) != null) 
       { 
        char[] delimiters = new char[] { ',' }; 
        string[] parts = line.Split(delimiters); 

        FileList objIntäkt = new FileList(); 
        objIntäkt.ProductNr = parts[0]; 
        objIntäkt.Product = parts[1]; 
        objIntäkt.CustomerNr = parts[2]; 
        objIntäkt.Customer = parts[3]; 

        objIntäkts.Add(objIntäkt); 
       } 
       //Stänger filen 
       file.Close(); 
      } 

그리고 나는 내가 TEXTFILE에서 읽고 싶은 물건에 대한 getter와 setter가 내 파일리스트 클래스의

모든 공백을 삭제 하시겠습니까?

+0

데이터 항목에 공간이 포함되지 않습니까? –

답변

4

당신은 항목이 적어도 공백이 포함되어 있으면, 당신은 잘못된 데이터가있을 것이라는 점을 StringSplitOptions.RemoveEmptyEntries

string[] parts = line.Split(new[]{' ', '\t'}, 
       StringSplitOptions.RemoveEmptyEntries); 

참고로 string.Split를 사용할 수 있습니다.

+0

감사! 이제 작동합니다! – Nisse

0

이 행의 공백 문자의 수에 분할합니다 Regex.Split

var parts = Regex.Split(line, "\w+"); 

사용.

0

파일 내용에 대해 안전한 가정을 할 수있는 경우 정규식을 사용하여 줄을 구문 분석 할 수 있습니다. 귀하의 예에서 제품 및 공급자 번호 뒤에는 특정 논리가 있습니다. 선에서 파트를 추출하는 정규 표현식을 작성할 수 있습니다. .NET의 정규식에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/hs600312.aspx을 참조하십시오.

0

단어 자체가이 작품 화이트 공백이 포함되지 않은 경우 : 그러나

var invalidData = File.ReadLines(filePath); 
var validData = invalidData 
    .Select(line => { 
     var sArr = line.Split(new[]{' ', '\t'}, StringSplitOptions.RemoveEmptyEntries); 
     return string.Join(" ", sArr); 
    }); 
string validText = string.Join(Environment.NewLine, validData); 
File.WriteAllText(filePath, validText); 

, 가능한 한 빨리 열에서 단어 나 데이터가 Split이 실패합니다 공백이 포함되어 있습니다. this과 같은 텍스트 열 주위의 인용 문자를 처리하는 대신 기존 CSV 파서를 사용하는 것이 좋습니다. 그런 다음 "Umbrella buyer"처럼 마스크해야합니다.

관련 문제