2015년 8월 11일 화요일

[미완] [영화] 미쓰와이프 시사회

[미완] [영화] 미쓰와이프 시사회

날짜: 2015.08.06 (목)
대한극장 10관

별: 2개

기억에 남는 장면: 장례식장에서 영어공부

한줄평: 어설픈 코믹디와 진분한 눈물샘자극

초반에 코믹으로 전개하다가 후반에 가족애를 통한 감독인것 같은데

초반 코믹디는 라미란을 통한 단발설 코믹디만 있고
후반에는 남편(사랑), 딸(성폭행), 아들(병) 한번씩 돌아가면서
가족애를 표현하는데 특히 후반 아들이야기는 너무 질질 끌어서 별로다.

[미완] [영화] 암살

[미완] [영화] 암살

날짜: 2015.07.23 (목)
상암CGV 아이맥스관

별: 4개....

기존의 최동훈 영화와는 차이가 있다.
친일파처단이라는 메시지를 주고 싶었는지
그래서 맨 마지막 장면은 좀 ...

2015년 8월 6일 목요일

[C언어/C++] TinyXML

[C언어/C++] TinyXML

C++ XML Parser로 오픈소스이고 상용에 사용해도 무료다.
(NotePad++에서도 사용)

그리고 TinyXML-2도 있습니다.
1에 비해 가볍고 빠르다고 합니다.
(TinyXML-2 사용법은 다음에)

* C++ XML 라이브러리 소개

--- TinyXML 간단한 사용법
TinyXML v2.6.2, Visual Studio 2008로 테스트 했습니다.

1. lib
다운로드한 TinyXML을 컴파일하면 .lib가 생성되고 이것을 사용하면 됨.
하지만 VS 2008에서 컴파일이 안되서 이것도 다음에
2. .h, .cpp 추가
6개파일(tinystr.h, tinystr.cpp, tinyxml.h, tinyxml.cpp, tinyxmlerror.cpp, tinyxmlparser.cpp)을
프로젝트에 추가하면 됨.

TinyXML 관련 6개 파일을 추가 후
#include "tinyxml.h" 선언

1. xml 만들기
위와 같은 간단한 xml 만들기

void CreateXml( void )
{
TiXmlDocument doc;

// 선언
TiXmlDeclaration* pDecl = new TiXmlDeclaration( "1.0", "euc-kr", "" );
doc.LinkEndChild( pDecl );

// Root Node
TiXmlElement* pRootNode = new TiXmlElement( "Root_Node" );
doc.LinkEndChild( pRootNode );

// A Node
TiXmlElement* pANode = new TiXmlElement( "A_Node" );
pRootNode->LinkEndChild( pANode );

TiXmlElement* pAElement1 =new TiXmlElement( "A_Element_1" );
pAElement1->LinkEndChild( new TiXmlText( "A Element 1 Text" ));
pANode->LinkEndChild( pAElement1 );

TiXmlElement* pAElement2 = new TiXmlElement( "A_Element_2" );
pAElement2->LinkEndChild( new TiXmlText( "A Element 2 Text" ));
pANode->LinkEndChild( pAElement2 );

// B Node
TiXmlElement* pBNode = new TiXmlElement( "B_Node" );
pRootNode->LinkEndChild( pBNode );
pBNode->SetAttribute( "Attribute", "Data" );
pBNode->SetAttribute( "int", 100 );
pBNode->SetDoubleAttribute("double", 123.45 ); // 소수점 입력

// C Node
TiXmlElement* pCNode = new TiXmlElement( "C_Node" );
pRootNode->LinkEndChild( pCNode );

TiXmlElement* pCElement = new TiXmlElement( "C_Element" );
pCElement->LinkEndChild( new TiXmlText( "C Element Text" ) );
pCNode->LinkEndChild( pCElement );

TiXmlElement* pCAttribute = new TiXmlElement( "C_Attribute" );
pCNode->LinkEndChild( pCAttribute );
pCAttribute->SetAttribute( "Attribute", "Data" );
pCAttribute->SetAttribute( "int", 100 );
pCAttribute->SetDoubleAttribute("double", 123.45 ); // 소수점 입력

// 주석
TiXmlComment* pComment = new TiXmlComment();
pComment->SetValue(" Comment " );
pRootNode->LinkEndChild( pComment );

// .xml 저장
doc.SaveFile("text.xml");
}

2. xml 읽기
void ReadXml( void )
{
// .xml 로드
TiXmlDocument doc;
doc.LoadFile( "text.xml" );
// 변수로 로드시
//char* Path = "text.xml";
//doc.Parse( Path );

// Root Node 접근
TiXmlElement* pRootNode = doc.FirstChildElement( "Root_Node" );
if ( NULL == pRootNode )
return;

// A_Node Type의 값 읽기
// 원하는 Node의 Element 접근 후 값 읽기
TiXmlElement* pANodeElem = pRootNode->FirstChildElement( "A_Node" )->FirstChildElement( "A_Element_1" );
if ( NULL == pANodeElem )
return;
const char* pszANode = pANodeElem->Value(); // pszNode=A_Element_1
const char* pszAText = pANodeElem->GetText(); // pszText=A Element 1 Text

// B_Node Type의 값 읽기
TiXmlElement* pBNodeElem = pRootNode->FirstChildElement( "B_Node" );
if ( NULL == pBNodeElem )
return;

// 방법 1
const char* psz1 = pBNodeElem->Attribute( "Attribute" ); // psz1=Data
const char* psz2 = pBNodeElem->Attribute( "int" ); // psz2=100
const char* psz3 = pBNodeElem->Attribute( "double" ); // psz3=123.45

// 방법 2
TiXmlAttribute* pAttribute = pBNodeElem->FirstAttribute();
const char* pszAttribute = pAttribute->Value(); // pszAttribute=Data

pAttribute = pAttribute->Next();
int nInt = pAttribute->IntValue(); // nInt=100

pAttribute = pAttribute->Next();
double ddouble = pAttribute->DoubleValue(); // ddouble=123.45
}

3. 수정
void WriteXml( void )
{
TiXmlDocument doc;
doc.LoadFile( "text.xml" );

// Root Node 접근
TiXmlElement* pRootNode = doc.FirstChildElement( "Root_Node" );
if ( NULL == pRootNode )
return;

// 삭제 후 새로저장
TiXmlElement* pCNodeElem = pRootNode->FirstChildElement( "C_Node" )->FirstChildElement( "C_Element" );
if ( NULL == pCNodeElem )
return;
pCNodeElem->Clear();
pCNodeElem ->LinkEndChild( new TiXmlText("Write_C_Element") );

// 수정 후 저장
TiXmlElement* pCNodeAttribute = pRootNode->FirstChildElement( "C_Node" )->FirstChildElement( "C_Attribute" );
if ( NULL == pCNodeAttribute )
return;
TiXmlAttribute* pAttribute = pCNodeAttribute->FirstAttribute();
pAttribute->SetValue( "Write_Data" );

pAttribute = pAttribute->Next();
pAttribute->SetIntValue( 200 );

pAttribute = pAttribute->Next();
pAttribute->SetDoubleValue( 567.89 );

doc.SaveFile( "text.xml" );
}

테스트파일 링크 겁니다.
http://cfile216.uf.daum.net/attach/2749493455C3159D1CD6E4