예를 들어 다양한 위치(Vector)에서의 값(Value)들을 저장하고 불러올 때 다음과 같은 형태의 문자열을 가지는 text파일을 불러와서 숫자로 변환해야 한다.
전체 코드는 다음과 같다.
[x, y, z, v]
0, 0, 0, 1
0.1, 2, 3.2, 0.001
...
긴 문자열(text)을 각 라인(line)으로 나누고, 그것을 단어(word)들로 분리한 후, 원하는 숫자로 파싱(Parsing)한다.- 긴 문자열을 라인별로 나눈다. (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... } }
- 정해진 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... } }
- 각 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...
}
}
}
}
댓글
댓글 쓰기