명확한 구분 기호없이 키-값 문자열을 어떻게 구문 분석합니까?

PNDA

3D 프린터를 제어하는 ​​작은 프로그램을 만들고 있습니다. 내가 무언가를 보낼 때 일반적으로으로 응답 ok하지만 문제가 있으면 다음과 같이 보냅니다.

 T:221.0 /220.0 @:0 W:1

적절한 구분 기호가 있으면 쉽게 구문 분석 할 수 있지만 문자열 때문에 공백을 사용하는 것은 신뢰할 수 없습니다 221.0 /220.0. 결과적으로 공백을 구분자 /220.0로 사용하면 키-값 쌍으로 취급 될 수 있지만 T. 나는 모든 콜론의 색인을 얻고 그 뒤에 1 문자를 시작하려고 계획했지만 키 길이도 가변적입니다. 예를 들면 :

 T:221.0 /220.0 B@:127 @:0 W:1

B@ 이제 2 자 길이입니다.

나는 약간의 조사를했지만 내가 찾은 모든 것에 는 데이터가 있는 URL과 같은 적절한 구분자가 있었다 .

http://www.niederschlagsradar.de/images.aspx?jaar=-6&type=europa.cld&datum=201311161500&cultuur=en-GB&continent=europa

나는 모든 콜론의 색인을 얻은 다음 시작점 역할을 할 콜론이 발견되면 공백을 뒤로 검색 할 계획이었습니다. 마찬가지로 다음 키-값 쌍의 시작 지점은 이전 항목의 끝점 역할을합니다. 그러나 이것이 올바른 접근 방식인지 확실하지 않습니다.

주요 질문 : 적절한 구분 기호없이 문자열을 어떻게 구문 분석합니까? 나는 정말로 특정한 요구 사항이 없습니다. 배열이든 목록이든, 키와 값에 대한 변수를 분리하거나 모든 것을 배열로 밀어 넣어

string[] data = {key1,value1,key2,value2,key3,value3};

업데이트 : 두 번째 예의 키-값 쌍은 다음과 같습니다.

Key:Value
  T:221.0 /220.0
 B@:127
  @:0
  W:1

더 많은 샘플 :

 T:221.0 /220.0 B:85.7 /120 B@:30W @:0 W:8

Key:Value
T:221.0 /220.0
B:85.7 /120
B@:30W
@:0
W:8

더 복잡한 또 다른 것이 있습니다.

 T:171.4 /220.0 B:90.3 /120 T1:171.4 /220.0 B@:30 @:12W W:6

Key:Value
T:171.4 /220.0   // Temperature of first nozzle heater
B:90.3 /120      // Temperature of the hot plate it's printing on
T1:171.4 /220.0  // Temperature of the second nozzle heater if it exists
B@:30            // Raw power consumption of hotbed (unit depends on config)
@:12W            // Power of of nozzle in Watts (unit depends on config)
W:6              // Waiting time (in seconds). If the optimal conditions are met and this counts down to zero, printing resumes. Else, reset to 10.

샘플 문자열 시작 부분의 공백은 의도적입니다. 공백으로 시작합니다. 관심있는 사람들을 위해 Marlin 3D 프린팅 펌웨어를 실행하는 Arduino Mega의 답변입니다. 프린터 히터가 아직 압출 될만큼 뜨겁지 않은 경우의 응답입니다.

관련 항목 : 문자열을 구문 분석하여 키-값 쌍을 찾는 방법

백신 접종 마법사 그림자

이 논리로 갈 것입니다.

  1. 콜론 문자로 분할합니다.
  2. 첫 번째 항목은 항상 첫 번째 키입니다.
  3. 마지막 항목은 항상 마지막 값입니다.
  4. 각 중간 항목 (두 번째 항목부터 시작)에 대해 마지막 공간의 색인을 확인합니다. 마지막 공간까지의 모든 것이 최신 키의 값이고 오른쪽에있는 모든 것이 다음 키입니다.

암호:

private List<KeyValuePair<string, string>> ParsePrinterResponse(string rawResponse)
{
    List<KeyValuePair<string, string>> pairs = new List<KeyValuePair<string, string>>();
    string[] colonItems = rawResponse.Trim().Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
    if (colonItems.Length > 1)
    {
        string currentKey = colonItems[0], currentValue = "";
        for (int i = 1; i < colonItems.Length; i++)
        {
            string currentItem = colonItems[i];
            int spaceIndex = currentItem.LastIndexOf(" ");
            if (spaceIndex < 0)
            {
                //end of string, whole item is the value
                currentValue = currentItem;
            }
            else
            {
                //middle of string, left part is value, right part is next key
                currentValue = currentItem.Substring(0, spaceIndex);
            }
            pairs.Add(new KeyValuePair<string, string>(currentKey, currentValue));
            currentKey = currentItem.Substring(spaceIndex + 1);
        }
    }
    return pairs;
}

사용 샘플 :

errorBox.Lines = ParsePrinterResponse("T:171.4 /220.0 B:90.3 /120 T1:171.4 /220.0 B@:30 @:12W W:6").ConvertAll(p =>
{
    return string.Format("{0}:{1}", p.Key, p.Value);
}).ToArray();

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

구문 분석 할 때 문자열 JSON 값을 객체에 어떻게 확장합니까?

분류에서Dev

Gson : 목록이나 문자열이 될 수있는 다형성 값을 어떻게 구문 분석합니까?

분류에서Dev

이 문자열을 검색 가능한 개체로 구문 분석하려면 어떻게해야합니까?

분류에서Dev

Powershell에서이 문자열을 어떻게 구문 분석합니까?

분류에서Dev

이 XML 문자열을 PHP로 어떻게 구문 분석합니까?

분류에서Dev

키없이 JSON 파일을 어떻게 구문 분석 할 수 있습니까?

분류에서Dev

맵에서 키 = 값 쌍으로 문자열을 구문 분석합니까?

분류에서Dev

정규식을 사용하여 복잡한 구분 기호로 문자열을 어떻게 분할합니까?

분류에서Dev

Objective C이 NSString을 어떻게 구문 분석합니까?

분류에서Dev

이 XML 조각을 어떻게 구문 분석합니까?

분류에서Dev

이 XML 조각을 어떻게 구문 분석합니까?

분류에서Dev

기본값이있는 문자열 목록에서 (잠재적으로 알려지지 않은) 키 / 값 쌍을 구문 분석하려면 어떻게해야합니까?

분류에서Dev

값을 추출하기위한 구문 분석 HTML 문자열

분류에서Dev

이 datetime 문자열을 어떻게 구문 분석 할 수 있습니까?

분류에서Dev

여러 페이지를 어떻게 구문 분석합니까?

분류에서Dev

이 형식화되지 않은 sha 키 응답 목록을 어떻게 구문 분석합니까?

분류에서Dev

Bash에서 배열 확장을 위해 다중 문자 구분 기호를 어떻게 사용합니까?

분류에서Dev

우분투에서이 URL을 어떻게 구문 분석합니까?

분류에서Dev

값에 인코딩되지 않은 <문자가있을 수있는 XML과 유사한 문자열을 어떻게 구문 분석 할 수 있습니까?

분류에서Dev

데이터 프레임에 추가 할 수있는 열에 구문 분석 가능한 필드가 포함 된 문자열을 어떻게 추가합니까?

분류에서Dev

gridview 내부의 linkbutton에서 값을 어떻게 구문 분석합니까?

분류에서Dev

cJSON 키-값 구문 분석

분류에서Dev

키-값 쌍 구문 분석

분류에서Dev

관심있는 키만 구문 분석하려면 어떻게합니까?

분류에서Dev

더 긴 문자열에서이 문자열을 어떻게 구문 분석 할 수 있습니까?

분류에서Dev

여러 줄에 걸쳐 값이있을 수있는 탭으로 구분 된 파일을 어떻게 구문 분석합니까?

분류에서Dev

찾을 json 문자열 및 요소 (키 / 값) 구문 분석

분류에서Dev

큰 DOCX 파일을 구문 분석하고 파이썬에서 n 번 나타나는 키워드 / 문자열을 어떻게 선택할 수 있습니까?

분류에서Dev

문자 수를 기준으로 문자열을 어떻게 구문 분석 할 수 있습니까?

Related 관련 기사

  1. 1

    구문 분석 할 때 문자열 JSON 값을 객체에 어떻게 확장합니까?

  2. 2

    Gson : 목록이나 문자열이 될 수있는 다형성 값을 어떻게 구문 분석합니까?

  3. 3

    이 문자열을 검색 가능한 개체로 구문 분석하려면 어떻게해야합니까?

  4. 4

    Powershell에서이 문자열을 어떻게 구문 분석합니까?

  5. 5

    이 XML 문자열을 PHP로 어떻게 구문 분석합니까?

  6. 6

    키없이 JSON 파일을 어떻게 구문 분석 할 수 있습니까?

  7. 7

    맵에서 키 = 값 쌍으로 문자열을 구문 분석합니까?

  8. 8

    정규식을 사용하여 복잡한 구분 기호로 문자열을 어떻게 분할합니까?

  9. 9

    Objective C이 NSString을 어떻게 구문 분석합니까?

  10. 10

    이 XML 조각을 어떻게 구문 분석합니까?

  11. 11

    이 XML 조각을 어떻게 구문 분석합니까?

  12. 12

    기본값이있는 문자열 목록에서 (잠재적으로 알려지지 않은) 키 / 값 쌍을 구문 분석하려면 어떻게해야합니까?

  13. 13

    값을 추출하기위한 구문 분석 HTML 문자열

  14. 14

    이 datetime 문자열을 어떻게 구문 분석 할 수 있습니까?

  15. 15

    여러 페이지를 어떻게 구문 분석합니까?

  16. 16

    이 형식화되지 않은 sha 키 응답 목록을 어떻게 구문 분석합니까?

  17. 17

    Bash에서 배열 확장을 위해 다중 문자 구분 기호를 어떻게 사용합니까?

  18. 18

    우분투에서이 URL을 어떻게 구문 분석합니까?

  19. 19

    값에 인코딩되지 않은 <문자가있을 수있는 XML과 유사한 문자열을 어떻게 구문 분석 할 수 있습니까?

  20. 20

    데이터 프레임에 추가 할 수있는 열에 구문 분석 가능한 필드가 포함 된 문자열을 어떻게 추가합니까?

  21. 21

    gridview 내부의 linkbutton에서 값을 어떻게 구문 분석합니까?

  22. 22

    cJSON 키-값 구문 분석

  23. 23

    키-값 쌍 구문 분석

  24. 24

    관심있는 키만 구문 분석하려면 어떻게합니까?

  25. 25

    더 긴 문자열에서이 문자열을 어떻게 구문 분석 할 수 있습니까?

  26. 26

    여러 줄에 걸쳐 값이있을 수있는 탭으로 구분 된 파일을 어떻게 구문 분석합니까?

  27. 27

    찾을 json 문자열 및 요소 (키 / 값) 구문 분석

  28. 28

    큰 DOCX 파일을 구문 분석하고 파이썬에서 n 번 나타나는 키워드 / 문자열을 어떻게 선택할 수 있습니까?

  29. 29

    문자 수를 기준으로 문자열을 어떻게 구문 분석 할 수 있습니까?

뜨겁다태그

보관