안녕하세요.
문자열을 파싱해서 각각 S1~S4까지의 값을 가져오고싶은데, 어떻게 해야할지 문의 드립니다…
길이만큼 잘라서 쓰려고 해도, S1~S4의 데이터 길이가 유동적이라서 그건 안되겠고,
가장 확실한건 JSON으로 변환해서 추출하는 것으로 생각되는데… 선배님들의 조언 부탁드립니다.
string res = “S1=001;S2=D1;S3=999;S4=960”;
안녕하세요.
문자열을 파싱해서 각각 S1~S4까지의 값을 가져오고싶은데, 어떻게 해야할지 문의 드립니다…
길이만큼 잘라서 쓰려고 해도, S1~S4의 데이터 길이가 유동적이라서 그건 안되겠고,
가장 확실한건 JSON으로 변환해서 추출하는 것으로 생각되는데… 선배님들의 조언 부탁드립니다.
string res = “S1=001;S2=D1;S3=999;S4=960”;
"="과 ";"를 delimeter 삼아 처리할 수 있을 것 같습니다.
using System;
using System.Linq;
public class Program
{
public static void Main()
{
string subject = "S1=001;S2=D1;S3=999;S4=960";
var result = subject
.Split(';')
.Select(x => x.Split('='))
.Select(x => (Key: x[0], Value: x[1]));
foreach(var v in result)
{
Console.WriteLine($"Key = {v.Key}, Value = {v.Value}");
}
}
}
답변 감사드립니다!!
혹시 S4=960; 세미콜론까지 포함되어 있으면 오류가 범위를 벗어낫다는 에러가 나오더라구요,
이 경우엔 어떻게 수정을 해야할지 다시한번 문의드립니다…
마지막에 세미콜론이 있는 경우 제거하는 메서드로 처리해 주시면 될것 같습니다.
string subject = “S1=001;S2=D1;S3=999;S4=960;”;
var result = subject.TrimEnd(‘;’)
.Split(‘;’)
.Select(x => x.Split(‘=’))
.Select(x => (Key: x[0], Value: x[1]));
답변 감사드립니다
해결되었습니다.
즐거운 추석되세요^-^
Split에 옵션을 줘서 빈항목을 제거하는 방법도 있습니다.
subject.Split(new char {‘;’}, StringSplitOptions.RemoveEmptyEntries)
형태로 사용해 가능합니다.