File Annotation

Not logged in
dcdd144598 2011-02-23        kinaba: #ifndef _KILIB_TEXTFILE_H_
dcdd144598 2011-02-23        kinaba: #define _KILIB_TEXTFILE_H_
dcdd144598 2011-02-23        kinaba: #include "types.h"
dcdd144598 2011-02-23        kinaba: #include "ktlaptr.h"
dcdd144598 2011-02-23        kinaba: #include "memory.h"
dcdd144598 2011-02-23        kinaba: #include "file.h"
dcdd144598 2011-02-23        kinaba: #ifndef __ccdoc__
dcdd144598 2011-02-23        kinaba: namespace ki {
dcdd144598 2011-02-23        kinaba: #endif
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: //@{ @pkg ki.StdLib //@}
dcdd144598 2011-02-23        kinaba: //@{
dcdd144598 2011-02-23        kinaba: //	利用可能コードセット
dcdd144598 2011-02-23        kinaba: //
dcdd144598 2011-02-23        kinaba: //	ただし、ここでリストアップされたもののうち、Windowsにちゃんと
dcdd144598 2011-02-23        kinaba: //	言語サポートがインストールされているものだけが実際には対応可能。
dcdd144598 2011-02-23        kinaba: //	値が-100より小さいコードは、そのすぐ上にあるコードページの言語
dcdd144598 2011-02-23        kinaba: //	サポートを利用して変換を行うため、それに依存する。
dcdd144598 2011-02-23        kinaba: //@}
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: enum charset {
dcdd144598 2011-02-23        kinaba: 	AutoDetect = 0,    // 自動判定
dcdd144598 2011-02-23        kinaba: 	                   // SJIS/EucJP/IsoJP/IsoKR/IsoCN
dcdd144598 2011-02-23        kinaba: 					   // UTF5/UTF8/UTF8N/UTF16b/UTF16l/UTF32b/UTF32l
dcdd144598 2011-02-23        kinaba: 					   // を判定する。他は知らない。(^^;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	Western    = 1252, // 欧米      (Windows1252 >> ISO-8859-1)
dcdd144598 2011-02-23        kinaba: 	Turkish    = 1254, // トルコ語  (Windows1254 >> ISO-8859-9)
dcdd144598 2011-02-23        kinaba: 	Hebrew     = 1255, // ヘブライ語(Windows1255 >> ISO-8859-8)
dcdd144598 2011-02-23        kinaba: 	Arabic     = 1256, // アラビア語(Windows1256 〜 ISO-8859-6)
dcdd144598 2011-02-23        kinaba: 	Baltic     = 1257, // バルト語  (Windows1257 >> ISO-8859-13)
dcdd144598 2011-02-23        kinaba: 	Vietnamese = 1258, // ベトナム語(Windows1258 != VISCII)
dcdd144598 2011-02-23        kinaba: 	Central    = 1250, // 中央ヨーロッパ(Windows1250 〜 ISO-8859-2)
dcdd144598 2011-02-23        kinaba: 	Greek      = 1253, // ギリシャ語(Windows1253 〜 ISO-8859-7)
dcdd144598 2011-02-23        kinaba: 	Thai       = 874,  // タイ語
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	Cyrillic   = 1251, // キリル語(Windows1251 != ISO-8859-5)
dcdd144598 2011-02-23        kinaba: 	Koi8R      = 20866,// キリル語(KOI8-R)
dcdd144598 2011-02-23        kinaba: 	Koi8U      = 21866,// キリル語(KOI8-U ウクライナ系)
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	UHC        = 949,  // 韓国語1 (Unified Hangle Code >> EUC-KR)
dcdd144598 2011-02-23        kinaba: 	IsoKR      = -950, // 韓国語2 (ISO-2022-KR)
dcdd144598 2011-02-23        kinaba: 	Johab      = 1361, // 韓国語3 (Johab)
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	GBK        = 936,  // 中国語1 (簡体字 GBK >> EUC-CN)
dcdd144598 2011-02-23        kinaba: 	IsoCN      = -936, // 中国語2 (簡体字 ISO-2022-CN)
dcdd144598 2011-02-23        kinaba: 	HZ         = -937, // 中国語3 (簡体字 HZ-GB2312)
dcdd144598 2011-02-23        kinaba: 	Big5       = 950,  // 中国語4 (繁体字 Big5)
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	SJIS       = 932,  // 日本語1 (Shift_JIS)
dcdd144598 2011-02-23        kinaba: 	EucJP      = -932, // 日本語2 (日本語EUC)
dcdd144598 2011-02-23        kinaba: 	IsoJP      = -933, // 日本語3 (ISO-2022-JP)
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	UTF5       = -2,   // Unicode  (UTF-5)   : BOM無し
dcdd144598 2011-02-23        kinaba: 	UTF7       = 65000,// Unicode  (UTF-7)   : BOM無し
dcdd144598 2011-02-23        kinaba: 	UTF8       =-65001,// Unicode  (UTF-8)   : BOM有り
dcdd144598 2011-02-23        kinaba: 	UTF8N      = 65001,// Unicode  (UTF-8N)  : BOM無し
dcdd144598 2011-02-23        kinaba: 	UTF16b     = -3,   // Unicode  (UTF-16)  : BOM有り BE
dcdd144598 2011-02-23        kinaba: 	UTF16l     = -4,   // Unicode  (UTF-16)  : BOM有り LE
dcdd144598 2011-02-23        kinaba: 	UTF16BE    = -5,   // Unicode  (UTF-16BE): BOM無し
dcdd144598 2011-02-23        kinaba: 	UTF16LE    = -6,   // Unicode  (UTF-16LE): BOM無し
dcdd144598 2011-02-23        kinaba: 	UTF32b     = -7,   // Unicode  (UTF-32)  : BOM有り BE
dcdd144598 2011-02-23        kinaba: 	UTF32l     = -8,   // Unicode  (UTF-32)  : BOM有り LE
dcdd144598 2011-02-23        kinaba: 	UTF32BE    = -9,   // Unicode  (UTF-32BE): BOM無し
dcdd144598 2011-02-23        kinaba: 	UTF32LE    = -10,  // Unicode  (UTF-32LE): BOM無し
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	DOSUS      = 437   // DOSLatinUS (CP437)
dcdd144598 2011-02-23        kinaba: };
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: //@{
dcdd144598 2011-02-23        kinaba: //	改行コード
dcdd144598 2011-02-23        kinaba: //@}
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: enum lbcode {
dcdd144598 2011-02-23        kinaba: 	CR   = 0,
dcdd144598 2011-02-23        kinaba: 	LF   = 1,
dcdd144598 2011-02-23        kinaba: 	CRLF = 2
dcdd144598 2011-02-23        kinaba: };
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: struct TextFileRPimpl;
dcdd144598 2011-02-23        kinaba: struct TextFileWPimpl;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: //@{
dcdd144598 2011-02-23        kinaba: //	テキストファイル読込
dcdd144598 2011-02-23        kinaba: //
dcdd144598 2011-02-23        kinaba: //	ファイルを指定された文字コードで解釈し、Unicode文字列として
dcdd144598 2011-02-23        kinaba: //	一行毎に返す。文字コードや改行コードの自動判定も可能。
dcdd144598 2011-02-23        kinaba: //@}
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: class TextFileR : public Object
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: public:
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ コンストラクタ(コード指定)//@}
dcdd144598 2011-02-23        kinaba: 	TextFileR( int charset=AutoDetect );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ デストラクタ //@}
dcdd144598 2011-02-23        kinaba: 	~TextFileR();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ 開く //@}
dcdd144598 2011-02-23        kinaba: 	bool Open( const TCHAR* fname );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ 閉じる //@}
dcdd144598 2011-02-23        kinaba: 	void Close();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{
dcdd144598 2011-02-23        kinaba: 	//	読み込み (読んだ長さを返す)
dcdd144598 2011-02-23        kinaba: 	//
dcdd144598 2011-02-23        kinaba: 	//	少なくとも20くらいのサイズを確保したバッファを指定してください。
dcdd144598 2011-02-23        kinaba: 	//@}
dcdd144598 2011-02-23        kinaba: 	size_t ReadLine( unicode* buf, ulong siz );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: public:
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ 読んでるファイルのコードページ //@}
dcdd144598 2011-02-23        kinaba: 	int codepage() const;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ 改行コード (0:CR, 1:LF, 2:CRLF) //@}
dcdd144598 2011-02-23        kinaba: 	int linebreak() const;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ 読み込み状況 (0:EOF, 1:EOL, 2:EOB) //@}
dcdd144598 2011-02-23        kinaba: 	int state() const;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ ファイルサイズ //@}
dcdd144598 2011-02-23        kinaba: 	ulong size() const;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ 改行が一個も見つからなかったフラグ //@}
dcdd144598 2011-02-23        kinaba: 	bool nolb_found() const;
dcdd144598 2011-02-23        kinaba: private:
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	dptr<TextFileRPimpl> impl_;
dcdd144598 2011-02-23        kinaba: 	FileR                fp_;
dcdd144598 2011-02-23        kinaba: 	int                  cs_;
dcdd144598 2011-02-23        kinaba: 	int                  lb_;
dcdd144598 2011-02-23        kinaba: 	bool          nolbFound_;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: private:
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	int AutoDetection( int cs, const uchar* ptr, ulong siz );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: private:
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	NOCOPY(TextFileR);
dcdd144598 2011-02-23        kinaba: };
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: inline int TextFileR::codepage() const
dcdd144598 2011-02-23        kinaba: 	{ return cs_; }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: inline int TextFileR::linebreak() const
dcdd144598 2011-02-23        kinaba: 	{ return lb_; }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: inline ulong TextFileR::size() const
dcdd144598 2011-02-23        kinaba: 	{ return fp_.size(); }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: inline bool TextFileR::nolb_found() const
dcdd144598 2011-02-23        kinaba: 	{ return nolbFound_; }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: //@{
dcdd144598 2011-02-23        kinaba: //	テキストファイル書込
dcdd144598 2011-02-23        kinaba: //
dcdd144598 2011-02-23        kinaba: //	Unicode文字列を受け取り、指定された文字コードに変換しながら出力する。
dcdd144598 2011-02-23        kinaba: //@}
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: class TextFileW : public Object
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: public:
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ コンストラクタ(文字,改行コード指定)//@}
dcdd144598 2011-02-23        kinaba: 	TextFileW( int charset, int linebreak );
dcdd144598 2011-02-23        kinaba: 	~TextFileW();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ 開く //@}
dcdd144598 2011-02-23        kinaba: 	bool Open( const TCHAR* fname );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ 閉じる //@}
dcdd144598 2011-02-23        kinaba: 	void Close();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	//@{ 一行書き出し //@}
dcdd144598 2011-02-23        kinaba: 	void WriteLine( const unicode* buf, ulong siz, bool lastline );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: private:
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	dptr<TextFileWPimpl> impl_;
dcdd144598 2011-02-23        kinaba: 	FileW                fp_;
dcdd144598 2011-02-23        kinaba: 	const int            cs_;
dcdd144598 2011-02-23        kinaba: 	const int            lb_;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: private:
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	NOCOPY(TextFileW);
dcdd144598 2011-02-23        kinaba: };
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: }      // namespace ki
dcdd144598 2011-02-23        kinaba: #endif // _KILIB_TEXTFILE_H_