2004/1/26 (月) 22:17:43 dskoba  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3372] 行コメントが保存できない の修正
CProfile.cpp の 78 行目

・コメントの削除の際,行内に"="が含まれていないことを確認する

if( iter->npos != idx )
 ↓
if( iter->npos != idx && iter->npos == iter->find( _T("=") ))

2004/1/27 (火) 00:49:08 げんた  
INCM1.23c
[3373] RE: 行コメントが保存できない の修正
>・コメントの削除の際,行内に"="が含まれていないことを確認する
コメントは1行目の先頭から始まる物しか存在しないのだから行頭から//となっている物だけをチェックすれば十分でしょう.
人間が編集するわけではないし.

極端な話1行目だけ読み捨てれば十分だが,あとで仕様の誤解を招いてはまりそうだからそれはやめた方がいいと思う.

2004/1/27 (火) 02:16:53 dskoba  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3374] Re2: 行コメントが保存できない の修正
ご迷惑をおかけします。

DIFF差分
http://www2.wbs.ne.jp/~dskoba/sakura/1435cprofile_to_dsk20040127.lzh

・コメントは単純に行頭が"//"の行とする
・sstream をやめて _tstoi(),_itot() を使用
・変数名の修正
・必要かな?と思って追加していた関数は,永久に使いそうもないので削除
・バイナリサイズ軽減のため関数の inline をやめる

2004/1/27 (火) 14:14:09 みく  
INCM1.23a
[3375] Re3: 行コメントが保存できない の修正

93:iter->erase( --(iter->end()) );

VC++6.0

ssrc_2004-01-25\sakura_core\CProfile.cpp(93) : error C2105: '--' には左辺値が必要です。

2004/1/27 (火) 14:28:25 みく  
INCM1.23a
[3376] Re4: 行コメントが保存できない の修正

パッチを当てた後のVC++6.0でのビルドエラー。

ssrc_2004-01-25\sakura_core\CProfile.cpp(96) : error C2105: '--' には左辺値が必要です。
ssrc_2004-01-25\sakura_core\CProfile.cpp(271) : error C2065: '_tstoi' : 定義されていない識別子です。

2004/1/27 (火) 17:26:33 もか  
INCM1.23a
[3378] Re5: 行コメントが保存できない の修正(_tstoi)
_tstoiとおそらく同じ機能をするマクロ名の_ttoiなら、VC6/BCC551付属のヘッダでもつかえます。
完全に同一かどうかは、ヘッダを見ないといけませんが、VS.NETを所持していないんで、確認が取れませんでした。
_tstoiをmy_tcharで定義するよりは、どっちかというと_ttoiに統一したほうが良いとおもいます。
# MSはどういう意図で別名用意したんだろう。紛らわしいだけな.

2004/1/27 (火) 22:09:06 dskoba  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3379] Re5: 行コメントが保存できない の修正
> ssrc_2004-01-25\sakura_core\CProfile.cpp(96) : error C2105: '--' には左辺値が必要です。

iter->erase( iter->begin() );
iter->erase( --(iter->end()) );
  ↓
iter->erase( iter->size()-1, 1 );
iter->erase( 0, 1 );

2004/1/28 (水) 02:40:49 げんた  
INCM1.23c
[3382] CProfileのいろいろ
見てます.
>iter->erase( iter->size()-1, 1 );
>iter->erase( 0, 1 );

最後の]をちゃんと確認すべく
unsigned int idx = iter->find( _T("]") );
if( idx != iter->npos ){
        Section Buffer;
        Buffer.strSectionName = iter->substr( 1, idx - 1 - 1 ).c_str();
        m_ProfileData.push_back( Buffer );
}
としてみた.

--
文字列比較でfindの結果と位置を比較しているが,位置が既知なのであるからcompareを使った方が効率的かと.
if( 0 == iter->compare( 0, 2, _T("//") )) continue;

--
要素の空チェックにはempty()を使ってsize()は使わない.
(空文字列チェックを strlen(str)==0ではなくstr[0]=='\0'とするのと同じ理屈)
else if( !m_ProfileData.empty())

--
Unicode版ではsakura.iniもUnicodeになるのでOK?WriteFile()で_T()の無い文字列が残っていますが.

2004/1/28 (水) 23:21:30 dskoba  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
[3385] Re:CProfileのいろいろ
げんたさん,ありがとうございます。

http://www2.wbs.ne.jp/~dskoba/sakura/1435cprofile_to_dsk20040128.lzh

> 最後の]をちゃんと確認すべく
> unsigned int idx = iter->find( _T("]") );
> if( idx != iter->npos ){


if( iter->find( _T("[") ) == 0
    && iter->find( _T("=") ) == iter->npos
    && iter->find( _T("]") ) == ( iter->size() - 1 ) )
こんな風にしておきました。
今気づきましたが,これもcompare()の方が良いですかね?

> Unicode版ではsakura.iniもUnicodeになるのでOK?WriteFile()で_T()の無い文字列が残っていますが.

突っ込まれてしまった…。
Unicodeにすると fstream が wchar_t* のファイル名を受け付けてくれないのでコンパイルできません。
ので,放置していて_T()を付け忘れていました。ファイルに書く部分はWriteFile()に分離しておきました。
ReadFile()とWriteFile()はCFileLoadとCFileWriteとかで書き直してください,誰か。

INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.010]