プログラミング【スポンサーリンク】C言語でCSV読込みをする方法についてです。今回はstrtok()を使って実現する方法をご紹介します。今回作るものサンプルデータソース全景strtok()についてstrtok()使用時のイメージstrtok()の利点あとがき今回作るものあるCSVのデータを読込みます。そのデータから必要なデータを検出して、ピックアップする処理を作っていきます。サンプルデータこんな感じのよくあるCSVデータを用意してみました。test.csvKeyAAA,Name123,1.1,1.2,1.3KeyXXX,NameAAA,2.1,2.2,2.3KeyXXX,NameBBB,3.1,3.2,3.3KeyZZZ,Name999,4.1,4.2,4.3コレをファイル読込み......と思ったけど面倒なので、読み込んだつもりで文字列から処理します。ソース全景ソースの全景はコチラ。長いので畳んでおきます。0;}実行すると結果はこのようになります。3.300000strtok()についてstrtokは、指定した文字列に対して、指定した区切り文字ごとの文字列を取得する事ができます。使うにはまずstring.hをinclude。<string.h>そしてこんな感じで使います。この例の場合、bufに入っている文字列に対して、「,(カンマ)」までの文字列を取得していきます。",");strtok()使用時のイメージ今回の例にある文字列の場合、bufに入っているのが"KeyAAA,Name123,1.1,1.2,1.3"という文字列をだとします。",");とすると、itemには先頭からカンマまでの文字列であるKeyAAAが入ります。次に「コレ以降のカンマまでの文字を更に取りたい!」となった場合です。第1引数に対象のバッファではなく、「NULL」を渡してあげます。",");とすると、itemには、前回カンマがあった次の文字~その次のカンマまでの文字列であるName123が入ります。同じように更に次を取りたいときは「NULL」を渡します。",");するとitemは1.1が取得できます。strtok()の利点strtok()を使えば、CSVを分解したいときなどに、いちいち文字列の検出や操作をガリガリしなくてもいいところです。scanf()やfscanf()などのscanf()系関数で、フォーマットに沿って一気にデータ取得!ということもできますが、コレよりも安全性が高いです。.引用http://www.c-tipsref.com/reference/stdio/fscanf.htmlのように、scanf()系関数は、エラーの温床となる可能性があります。ものは使いようですが、strtok()のように別の関数でうまいこと作ってあげることで、リスクを減らせるかもしれませんね。あとがきC言語は長らく使ってきました、割と同じような関数でなんとかなっちゃったりしますよね。使う関数を久しぶりに使ったので、ちょっと新鮮な気持ちでした。lisz-worksスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。