◀ANSI版開発トップへ
  • 3372 行コメントが保存できない の修正
    • 3373 RE: 行コメントが保存できない の修正
      • 3374 Re2: 行コメントが保存できない の修正
        • 3375 Re3: 行コメントが保存できない の修正
          • 3376 Re4: 行コメントが保存できない の修正
            • 3378 Re5: 行コメントが保存できない の修正(_tstoi)
            • 3379 Re5: 行コメントが保存できない の修正
              • 3382 CProfileのいろいろ
                • 3385 Re:CProfileのいろいろ
  • [3372] 行コメントが保存できない の修正 dskoba 2004年01月26日 22:17

    CProfile.cpp の 78 行目

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

    if( iter->npos != idx )
     ↓
    if( iter->npos != idx && iter->npos == iter->find( _T("=") ))
    • [3373] RE: 行コメントが保存できない の修正 げんた 2004年01月27日 00:49

      >・コメントの削除の際,行内に"="が含まれていないことを確認する
      コメントは1行目の先頭から始まる物しか存在しないのだから行頭から//となっている物だけをチェックすれば十分でしょう.
      人間が編集するわけではないし.

      極端な話1行目だけ読み捨てれば十分だが,あとで仕様の誤解を招いてはまりそうだからそれはやめた方がいいと思う.
      • [3374] Re2: 行コメントが保存できない の修正 dskoba 2004年01月27日 02:16

        ご迷惑をおかけします。

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

        ・コメントは単純に行頭が"//"の行とする
        ・sstream をやめて _tstoi(),_itot() を使用
        ・変数名の修正
        ・必要かな?と思って追加していた関数は,永久に使いそうもないので削除
        ・バイナリサイズ軽減のため関数の inline をやめる
        • [3375] Re3: 行コメントが保存できない の修正 みく 2004年01月27日 14:14


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

          VC++6.0

          ssrc_2004-01-25\sakura_core\CProfile.cpp(93) : error C2105: '--' には左辺値が必要です。
          • [3376] Re4: 行コメントが保存できない の修正 みく 2004年01月27日 14:28


            パッチを当てた後の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' : 定義されていない識別子です。
            • [3378] Re5: 行コメントが保存できない の修正(_tstoi) もか 2004年01月27日 17:26

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

              > 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 );
              • [3382] CProfileのいろいろ げんた 2004年01月28日 02:40

                見てます.
                >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()の無い文字列が残っていますが.
                • [3385] Re:CProfileのいろいろ dskoba 2004年01月28日 23:21

                  げんたさん,ありがとうございます。

                  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とかで書き直してください,誰か。