문제의 정의
제품의 데이터 로그를 문자열(string)의 연속으로 저장하여 남긴다고 가정하자. 예를 들어 위치 센서의 값이 데이터 로그로 저장되는 경우를 생각해보자. 이 위치센서의 값은 기준 대비 오일러(Euler) 좌표계로 값을 저장해둔다. 즉, Tx, Ty, Tz, Rx, Ry, Rz에 해당하는 값들이 저장되어 있다. 이러한 일련의 값들을 ','(comma)를 구분자(delimiter)로 두고 문자열로 저장해두었다. 이러한 데이터 로그를 읽어드려 더블(double) 타입의 변수에 저장하여 다루고자 한다. 즉, 문자열 데이터를 더블 타입의 어레이 변수로 저장하고자 한다. 이를 다이어그램(diagram)으로 표현하면 아래와 같다.
방법
일반적인 방법을 먼저 소개하겠다. 먼저 문자열 값을 저장한 후 구분자로 분리를 수행하여 문자열 어레이로 변환한다. 이후 더블 타입 어레이를 문자열 정의한다. 이때 더블 타입 어레이의 크기는 문자열 어레이의 크기와 같다. 이후 for 루프(loop)로 문자열 어레이의 문자열을 하나하나 더블 타입으로 변환하여 이전에 정의한 더블 타입 어레이에 하나씩 저장한다.
이보다 짧고 간략한 코드를 써보자. C#의 Array 클래스가 가지고 있는 Array.ConvertAll 메서드를 사용하여 특정 어레이를 변환하고자 하는 타입의 변수 어레이로 쉽게 변환할 수 있다. Array.ConvertAll 메서드가 필요로 하는 파라미터를 간단히 설명하면 아래의 그림과 같다.
위의 설명한 방법과 메서드를 사용하여 테스트 코드를 작성하면 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test
{
class Program
{
static void Main(string[] args)
{
string strsWithComma = "100.1,23.3,34.1,11.0,70.5,6.1";
double[] dbArr = Array.ConvertAll(strsWithComma.Split(','), Double.Parse);
foreach (var elm in dbArr)
{
Console.WriteLine(elm);
Console.WriteLine(elm.GetType());
}
}
}
}
|
cs |
먼저 임의의 이동 값(translation term; Tx, Ty, Tz), 회전 값(rotation term; Rx, Ry, Rz)을 문자열로 저장하였다. 이후 Array.ConvertAll 메서드의 첫번째 인자로 어레이를 넣어야 한다. 변환하고자 하는 입력 파라미터(TInput[] array)로 문자열 어레이를 주어야 한다. 여기서 문자열 타입이 가지고 있는 메서드 중 하나인 Split을 사용하여 문자열 어레이로 변환한다. 이후 메서드에 다음 파라미터로 Double.Parse를 입력으로 주어 문자열 타입을 더블 타입으로 변환할 수 있게 한다.
이후 변환된 더블 타입 어레이의 값들을 확인하기 위해 foreach 루프를 사용하여 값과 이 값의 타입을 출력하여 확인해보았다. 그 출력된 결과는 아래와 같으며, 각 값과 더블 타입을 확인할 수 있었다.
Reference
- stackoverflow.com/questions/9524682/fastest-way-to-convert-string-array-to-double-array
- docs.microsoft.com/ko-kr/dotnet/api/system.array.convertall?view=net-5.0
- https://www.flaticon.com/
- github.com/daegukdo/TIL/tree/master/02_C_sharp/018_CvtTypeArr2TypeArr
'Study > C#' 카테고리의 다른 글
이벤트 호출 시 null 확인 코드의 중요성 (0) | 2021.02.08 |
---|---|
C# WPF에서 MVC 디자인 패턴 연습 예제 구현하기 (0) | 2021.01.25 |
특정 어레이(array)의 일부분을 가져오거나 복사하기 (0) | 2021.01.19 |
C# WPF에서 user control과 data binding에 대한 간단한 설명 (0) | 2021.01.17 |
Third-party library 사용에 있어서 visual studio와 C# version 그리고 .NET framework 확인의 중요성 (0) | 2020.02.20 |