[C#] 문자열에서 숫자 추출하기

예를 들어 다양한 위치(Vector)에서의 값(Value)들을 저장하고 불러올 때 다음과 같은 형태의 문자열을 가지는 text파일을 불러와서 숫자로 변환해야 한다.



[x, y, z, v]
0, 0, 0, 1
0.1, 2, 3.2, 0.001
...
긴 문자열(text)을 각 라인(line)으로 나누고, 그것을 단어(word)들로 분리한 후, 원하는 숫자로 파싱(Parsing)한다.
  1. 긴 문자열을 라인별로 나눈다. (using System.IO;)
    [참고 소스 위치: http://www.csharp411.com/c-read-string-line-by-line/]
    string text = "0, 0, 0, 1\n0.1, 2, 3.2, 0.001\n"; 
    using (StringReader reader = new StringReader(text)) 
    { 
        string line; 
        while ((line = reader.ReadLine()) != null) 
        { 
             // Do Something... 
        } 
    }
    
  2. 정해진 delimiter를 기준으로 긴 문자열에서 word를 분리한다. 이 작업은 각 word를 숫자로 변환할 때 필요하다.
    [참고 소스 위치: http://msdn.microsoft.com/en-us/library/ms228388.aspx]
    그런데 위와 같이 하면, delimeter가 2개 이상 연결된 경우는 제대로 처리를 하지 못한다. 따라서 아래와 같은 소스를 을 이용하여 한다.
    [참고 소스 위치: http://msdn.microsoft.com/en-us/library/b873y76a.aspx]
    string [] words= line.Split(new Char [] {' ', ',', '.', ':', '\t' }); 
    foreach (string word in words) { 
        if (word.Trim() != "") 
        { 
            // Console.WriteLine(word); 
            // Do Something... 
        } 
    }
    
  3. 각 word를 int, double 등으로 parsing한다. string을 숫자로 변환하는 코드는 다음과 같다.
    [참고 소스 위치: http://msdn.microsoft.com/en-us/library/bb384043.aspx]
    위 코드에서 long 부분에 byte, int, float, double, decimal 등을 바꾸면 원하는 타입으로 변환할 수 있다.

전체 코드는 다음과 같다.
string text = "0, 0, 0, 1\n0.1, 2, 3.2, 0.001\n"; 
using (StringReader reader = new StringReader(text)) 
{ 
    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
        string [] words= line.Split(new Char [] {' ', ',', '.', ':', '\t' }); 
        float[] v = new float[4]; 
        int i = 0; 
        foreach (string word in words) { 
            if (word.Trim() != "") 
            { 
                float v[i++] = float.Parse(word); 
                // Do Something... 
            } 
        } 
    }
}

댓글