SQLite( or PostgreSQL)でファイルパスからファイル名だけを取得する。
SQLiteでファイルパスからファイル名を取得したくなったので調べてみました。
SQLiteにはlastIndexOfのようなものがないみたいです。
instr()で文字列の位置を検索できますが、最初の位置しか返さないのでファイル名取得には使用できません。
Oracleみたいにpositionを指定できてマイナスを指定したら文末からサーチしてくれればよかったんですけど。
困ったときはstackoverflowってことで調べてみました。
ドンピシャなQuestionがありました。
これによると以下のようにすればOKということらしいです。
select replace(filepath, rtrim(filepath, replace(filepath, '\', '')), '') from table;
ほんとにとれました。
rtrimを使うなんて凡人にはできない発想ですね。
しかも1つずつ分解して考えてもどういうことなのかよくわからない。。
まー深くは考えないことにします。
rtrim?ほんまにとれるのーと疑っているそこのアナタ。
以下のページからSQLiteを選択して以下のSQLを実行してみてください。
びっくりすることにとれます。
select replace('c:\work\subwork\hogehoge.xls', rtrim('c:\work\subwork\hogehoge.xls', replace('c:\work\subwork\hogehoge.xls', '\', '')), '');
ちなみにPostgreSQLでも同じ方法でとれました。
Rubyのhttps通信で"certificate verify failed (OpenSSL::SSL::SSLError)"というエラーが出たが、証明書を設定するのが面倒でとりあえず動かしたいとき。
Rubyで'net/https'を使ってHTTPS通信を行ったとき、以下のエラーがでました。
C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:933:in `connect_nonblock': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
どうやらSSLの検証に引っかかっているみたいです。
とりあえず動かしたい!ってときは以下のようにverify_modeの指定を追加して検証しないというように設定すればOKです。
https = Net::HTTP.new('xxx.xxx.xxx',443) https.use_ssl = true # これを追加 https.verify_mode = OpenSSL::SSL::VERIFY_NONE https.start{ }
以下のマニュアルにはデフォルトはVERIFY_NONEって書いてありますけど、追加しないと動きませんでした。
instance method Net::HTTP#verify_mode= (Ruby 2.3.0)
正しく対処するには証明書をダウンロードして明示的に指定する必要があるらしいですが、とりあえず動かしたいときはこれだけでOKですね。
"gitignore.io" 管理したいソースに対応した.gitignoreを自動で生成してくれるサービス。
gitになれるとなんでもgitで管理したくなりますが、面倒なのがgitの除外設定です。
gitignore.ioは管理するソースに対応した.gitignoreのテンプレートを出力してくれるサービスです。
VisualStudioやEclipseってキーワードをいれるだけで生成されます。
便利なことに複合することもできます。
こりゃ便利!