DOBON.NET DOBON.NETプログラミング掲示板過去ログ

一行一行読み込んで先頭のアドレスを返す方法

環境/言語:[VC,ANSI C]
分類:[その他]

1,3333,444,4444
4,456,ううう,3333
3,あああ,6566,6666
2,555,6666,7777

上記のようなカンマ区切りの先頭がキーになっているデータについて
ある行を編集するプログラムを書いているのですが
任意の行のポインタのアドレスを取得するために
一行一行データを読み込み、キーと一致した行のアドレスを取得したいと思っております。

fgets(buff,999,*fp)で一行一行取得すると、
キーと一致した行でもその行の位置をポインタが返さず、
一番最後の行のポインタを返してきます。

またfreadで読み込もうとすると、全データを読み込んでしまい、
一行一行読み込むところではございません。

一行一行読み込んで、その行のアドレスを返す方法がございましたら
ご教授願います
■No6806に返信(しんさんの記事)
> fgets(buff,999,*fp)で一行一行取得すると、
> キーと一致した行でもその行の位置をポインタが返さず、

その処理をしている「問題の部分」がソースなり、詳細なりがあれば答えやすいのですが...

> 一番最後の行のポインタを返してきます。

何もやってなければ、そうなるでしょうね。

言われた「通り」にやるとこんな感じになると思いますが...

Source:--------------------------------------------------------------------

char* GetMatch(const char szFilePath[256], const char szSearch[256]) {
    FILE *fpInput;
    char *pFind;
    char szBuffer[256];

    if ((fpInput = fopen(szFilePath, "r")) == NULL) {
        return NULL;
    }

    while (fgets(szBuffer, 256, fpInput) != NULL) {
        if ((pFind = strstr(szBuffer, szSearch)) != NULL) {
            //マッチした
            return pFind;
        }
    }

    return NULL;
}

---------------------------------------------------------------------------
レスたいへんありがとうございます。

■No6809に返信(java.lang.Nullpoさんの記事)
> ■No6806に返信(しんさんの記事)
>>fgets(buff,999,*fp)で一行一行取得すると、
>>キーと一致した行でもその行の位置をポインタが返さず、
>
> その処理をしている「問題の部分」がソースなり、詳細なりがあれば答えやすいのですが...

char buff_rw[256];
FILE *frwp;
char seps[] = ","; //キー取得区切り文字
char *key_rw;
char *bunkatustr_rw;
char *strText_db_write_rw;


frwp = fopen("C:\\kyuyo_system\\data.csv" , "r+");
if(frwp == NULL)
{
MessageBox(NULL , TEXT("ファイルがオープンできませんでした") ,NULL , MB_OK);
return(1);
}
while(fgets(buff_rw, 256 , frwp)!=NULL)
{
bunkatustr_rw = strtok( buff_rw, seps); //カンマで文字列を分割、行の頭のキーを抽出

if(*key_rw ==*bunkatustr_rw) //データベースのキーと入力したキーが一致したらループを抜ける
{
break;
}
}


fputs(strText_db_write_rw,frwp); //データベースのキーと入力したキーが一致した行に文字を書き込む
fclose(frwp);


データベースのキーに一致しなかった場合や、データベースの最後の行のキーを指定した場合に
    データベースの最後の行の後ろに文字列が書き込まれ、
    データベースのキーに一致した場合は、どこにも文字列が書き込まれません。
fputs(strText_db_write_rw,frwp);は動作してはいるのですが・・・。

DOBON.NET | プログラミング道 | プログラミング掲示板