KnP House for Daily

[Tizen Native App] CSV파일 Read (읽어오기) 본문

Tizen/Tizen project

[Tizen Native App] CSV파일 Read (읽어오기)

K.ung 2014.06.09 06:05

오늘은 기본적인 CSV 파일 읽어오는 방법에 대해 알아보쟈.



C++ 기반인 Native App은 기존의 C++이 read하는 방법 대로 해도 무방 하나,


C++ std::string 과  Tizen::Base::String은 형식이 달라 귀찮은 과정이 포함되고 


C++ 라이브러리를 추가해야 하기 때문에 번거롭다.


그래서 Tizen 에 맞게 Read를 해보쟈




1. File 불러오기


	File file;
	String filePath = App::GetInstance()->GetAppRootPath() + L"data/stationlist.csv";
	
	result r = file.Construct(filePath, "r");
	
	FileAttributes att;
	r = File::GetAttributes(filePath, att);
	
	long long size = att.GetFileSize();
	
	ByteBuffer buf;
	r = buf.Construct(size + 1);
	
	r = file.Read(buf);

	String str;
	str += (char*)buf.GetPointer();


File class를 이용하여 data 폴더에 넣어논 csv 파일을 읽어들여, ByteBuffer에 Read를 시킨다.


파일 경로는 다른 곳에 두었다면 변경하면 된다. 


ByteBuffer는 String으로 변경해야 하므로,  char* 형의 캐스팅을 하여 변경 하면된다.



2.  Tokenizing


이제 String에 담겨져 있는 csv 내용들을 라인단위로 자르고, ',' (콤마) 단위로 잘라서 원하는 값을 취하는 마지막 단계이다.


	String token = "\n";
	String token2 = ",";

	StringTokenizer strTok(str,token);
	String tokStr;

	while(strTok.HasMoreTokens()){
		strTok.GetNextToken(tokStr);

		StringTokenizer strTok2(tokStr,token2);

		int itemNum = 0;
		String stationInfrom;
		while(strTok2.HasMoreTokens()){
			itemNum++;
			strTok2.GetNextToken(stationInfrom);
			if(itemNum == 1){
				busNameList->Add(stationInfrom);
			}else if(itemNum == 2){
				busNumList->Add(stationInfrom);
				itemNum=0;
			}
		}
	}

CSV는 라인단위와 콤마단위로 구분 되어져 있기 때문에, String으로 지정을 해놓은 다음

처음에는 라인단위로 잘라야 하기 때문에 Utiltly 에 있는 StringTokenizer 를 이용하여 지정하고, 

HasMoreTokens() 로 계속 진행 할 것이 있는지 체크하며, 

GetNextToken()으로 라인단위로 잘라가며 String에 결과값을 넣어준다.


그리고 , 한 라인을 잘라냈으면,   이번엔  StringTokenizer 로 콤마 단위로 잘라 준다.

위와같은 작업을 반복하며, 라인 단위 -> 콤마단위  작업을 끝날때까지 진행한다.

itemNum으로 콤마로 잘랐을때 인덱스값을 지정하여 원하는 값을 추출 할 수 있다.



저작자 표시 비영리 변경 금지
신고
0 Comments
댓글쓰기 폼