スポンサーリンク

C言語でCSV(カンマセパレータバリュー)の文字列を読み込む方法について考えます。

このような文字列をsscanf関数で読み込みます。

abc,def,ghi


この例だと、うまくいきません。

#include <stdio.h>
#include <stdlib.h>

#define BUF     16

int
main (int argc, char *argv[])
{
        char    *str = "abc,def,ghi";

        char    buf1[BUF];
        char    buf2[BUF];
        char    buf3[BUF];

        int     r;

        r = sscanf (str, "%s,%s,%s", buf1, buf2, buf3);
        printf ("n=%d, [%s] [%s] [%s]\n", r, buf1, buf2, buf3);

        exit (EXIT_SUCCESS);
}

これだと

r = sscanf (str, "%s,%s,%s", buf1, buf2, buf3);

1つしかとれてません。

% ./a.out
n=1, [abc,def,ghi] [] [a(壟真☆(_(]

%sに , が含まれてしまうのが原因です。

これに対して、下記のように修正をしてみます。

r = sscanf (str, "%[^,],%[^,],%[^,]", buf1, buf2, buf3);


#include <stdio.h>
#include <stdlib.h>

#define BUF     16

int
main (int argc, char *argv[])
{
        char    *str = "abc,def,ghi";

        char    buf1[BUF];
        char    buf2[BUF];
        char    buf3[BUF];

        int     r;

        r = sscanf (str, "%[^,],%[^,],%[^,]", buf1, buf2, buf3);
        printf ("n=%d, [%s] [%s] [%s]\n", r, buf1, buf2, buf3);

        exit (EXIT_SUCCESS);
}

これで、, (カンマ)をセパレータとして、読み込むことができます。

% ./a.out
n=3, [abc] [def] [ghi]

C言語関連の記事
[2007-12-22-1] FreeBSD C言語のerrnoの実装
[2007-10-01-1] C言語でカレントディレクトリを取得する getcwdの使い方
[2007-09-23-3] C言語の_Boool型とC99とgccとstdbool.hのbool型
[2007-07-17-1] C言語による間違えトップ10
[2007-07-16-1] C言語使いのJavaScript strstr
[2007-07-02-4] Part1 オープンソース/C言語に学ぶ「ソースコードの読み方」
参照しているページ (サイト内): [2007-10-01-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー