2016-09-09 4 views
1

모든 9 개의 9x3 행렬이 있습니다. 행 주요 형식으로 출력하려고하므로 모양이 비슷합니다. 공분산 : 000000000, 나는 그러나YAML에서 쉼표로 구분 된 목록을 내보내는 방법

out1 << YAML::Key << "covariance"; 
out1 << YAML::Literal<< covariance[0][0]<< "," << covariance[0][1]... etc. 

을 시도

내가 얻을 :

공분산 : 0 "," : 0 내가 뭘 잘못하고 있니?

참고 : [000000000]을 원하지 않습니다. 그때 괄호

+0

'[0,0,0,0]'없이는 대괄호가 유효하지 않습니다. YAML입니까? 그럼 어떻게 그걸 원하니? –

+0

이것은 http://www.yamllint.com/ –

+0

(이전 나의 코멘트를 대체 함)에 따른 것입니다. yamllint에서 '공분산 : 1,2,3'을 '공분산 : 1, 2, 3 "이라고 해석하고'공분산 : 1,2,3 '을'공분산 : 123 '으로 해석합니다. 이것은 공백이 중요하다는 것을 암시합니다. [YAML을 처음 접했습니다 :-)]. @Ariel, 출력에서 ​​쉼표 뒤에 공백을 예상합니까? –

답변

0

문자열을 구축하지 않고 그것을 좋아하고 것 그것을 밖으로 인쇄 :

는 점은 인쇄하고 값이 YAML 목록이되지 않는 것입니다, 그냥 평범
std::stringstream value; 
for (int i=0;i<N;i++) { 
    value << covariance[0][i]; 
    if (i + 1 < N) { 
    value << ","; 
    } 
} 
YAML::Emitter out; 
out << YAML::BeginMap; 
out << YAML::Key << "covariance" << YAML::Value << value.str(); 
out << YAML::EndMap; 

YAML처럼 보입니다. 따라서 yaml-cpp를 yaml-cpp 형식으로 사용할 수 없습니다. 너 스스로 그렇게해야 해.

+0

'공분산 : 1, 2, 3, 4'이 유효한 YAML 문서가 아닌 것은 사실입니까? 그렇다면 YAML에 익숙하지 않은 사람들을 위해 대답에서 명시 적으로 확인하는 것이 유용 할 수 있습니다. –

+0

@AaronMcDaid '공분산 : 1, 2, 3, 4'은 유효한 YAML 문서입니다. 그러나 그것은 '공분산'키와 '1, 2, 3, 4'값을 갖는 스칼라 인지도입니다. 요점은 값이 스칼라가 아니라 시퀀스라는 것입니다. –

+0

현재 대답은'공분산 : 1,2,3,4'을 출력합니다; 즉 공백없이. yamlint를 사용한 나의 실험은 YAML 독자가 그 출력의 쉼표를 무시하고 그것을 스칼라 1234로 읽는 것을 제안합니다. 아마도 yamllint는 정확하지 않지만 각 쉼표 뒤에 공백을 추가해야합니다. –

관련 문제