Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

boostのforeach文とsplitで改行等特定シンボル毎にリスト化する

for文よりスマートに記述できるケースも

実際のところ

#include <boost/algorithm/string.hpp>
#include <string>
#include <list>
#include <iostream>

#include <boost/foreach.hpp>
using namespace std;


int main()
{
    string str ("1,2\n3,4\n5,6");
    string delim ("\n");
    list<string> list_string;

    boost::split(list_string, str, boost::is_any_of(delim));

    BOOST_FOREACH (string x, list_string) {
        std::cout << x << std::endl;
    }
    return 0;
}

実行すると、こんなかんじ

$ ./hoge.o 
1,2
3,4
5,6

参考もと

for each文 - boostjp

boostライブラリでCSVをパース

boostはC++標準委員の中の人が関わってつくった、最強ライブラリです。
数学系やパーサー系の強力なのが揃っています。

実際のところ

#include <iostream>
#include <string>
#include <boost/tokenizer.hpp>
#include <boost/foreach.hpp>
using namespace std;

typedef boost::tokenizer< boost::escaped_list_separator<char> >
BOOST_TOKENIZER_ESCAPED_LIST;

void dump(BOOST_TOKENIZER_ESCAPED_LIST &tokens)
{
        BOOST_FOREACH(string s, tokens) {
                cout << "<" << s << "> ";
        }
        cout << endl;
}

int main(int argc, char *argv[])
{
        string str1("12,34\n56,78\n");

        BOOST_TOKENIZER_ESCAPED_LIST tokens1(str1);
        dump(tokens1);

        return 0;
}

write関数で所定の長さのデータを書き込む

エラー対策もブン投げた最小構成は以下のような感じ。
ただし、ファイルはちゃんと閉じましょう。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> 

int main(void) {
  int fd;
  char buf[256] = "1,2,3\n4,5,6\n7,8,9\n";
  ssize_t ret;
  
  fd = open("./data.log", O_CREAT|O_RDWR|O_TRUNC);
  ret = write(fd, buf, sizeof(buf));
  close(fd);
  return 0;
}

今回対象だったファイルをひらくと、以下のように。

$ cat data.log 
1,2,3
4,5,6
7,8,9

stdoutはファイルポインタとして渡せる

いままでC言語やってきて今更知ったのですが……stdoutはファイルポインタの型をもつため
ファイルポインタを引数にもつ関数に渡す事ができます。

いままで、なんとなく使ってました……。

getc(stdout);

とか

fputs("hello, world.", stdout);


stdin、stdout、stderr

【読書メモ】上達の法則

上達の法則―効率のよい努力を科学する (PHP新書)

上達の法則―効率のよい努力を科学する (PHP新書)

いわゆる意識高い系でなく、ちゃんとした研究を土台にして上達というものを分析している本です。

上級者は下手な人のリプレイがうまい、隣接分野もスムーズに学ぶ事ができる、歴史的経緯を踏まえて技を見通せるetc……など、
色々な寓話や諺でそれとなく触れられているアレコレについて、的確に記述されています。

中級者になってからの山場、スランプについても、それ自体が技の吸収に必要なプロセスだから諦めずに続けましょうというスタンス。
ただし、投げっぱなしという訳ではなく練習方のアプローチを変えれば道が拓けるという、具体的なアドバイス付き。

【読書メモ】 その数式、プログラムできますか?

その数式、プログラムできますか?

その数式、プログラムできますか?

仕事の関係で、アカデミアな方との共同実装をする必要がでてきました。
これまでの私といえば、ライブラリやドキュメント頼みの実装ばかりやっていました。
アルゴリズムなんていうのは人様が作ったものを転用するだけ。
このままではプロジェクトの足を引っ張りかねないと震えていたところ、
同僚が本誌を買ってきたのを思い出して一通り読んでみました。

副題の「数式は如何にしてプログラムに翻訳されるのか」からもわかる通り、
数学をプログラムに落としこむ際の考え方を身につけられる本です。
最終章ではRSA暗号の実装に触れるなど、ちゃんとやればプロジェクトで活きそう。

ただし、この本はこの手のものでありがちな「ライブラリをブンまわしてわかった気になる」タイプではありません。
より数学というものの考え方に寄り添った内容のため、付け焼き刃を期待している人には向いてないかも。
逆に、これまでの付け焼き刃的態度を改め基礎固めをしたい私みたいなのには向いています。
歴史的背景も書いてくれているので、いざ実装で迷った時に立ち返るポイントが得られるのも高得点。

ちなみに使用言語はC++ですが、出てくるサンプルは数行。
プログラミングの最低限の知見があれば読み解けるでしょう*1

*1:すくなくとも、C++苦手マンの私でもやってる事は理解できるレベル

【イベントログ】Japan Robot Week 2018に行ってきました

Japan Robot Week 2018に行ってきました
メインはTechShare社様の展示ヘルプです。
ロボットアームのDobotシリーズは展示会でも大好評でした!


他のブースの様子

抹茶入れるロボットアーム

サンプル装置というレベルを超えた格好いいやつ

robotisの人型
120万円するそうですが、予想をはるかに上回る高性能!!

wifi対応のボードカメラ! そういうのもあるのか!

カワイイ外観の電気自動車
ブースのヒトによると、適用する法律から青いナンバープレートなんだとか

ソフトロボティクスでなく、
真空吸引なのに何でも掴めるヤベェハンド