あぷりけーしょんの内部的なもの

Apple / Mac / iOS,ProgramPython,zsh

まだサンプルプログラムをぽちぽちいじっている程度の初心者の初の字くらいですが、Python をちょこっと使ってます。

Python の環境は Homebrew で pyenv をインストールし pyenv を使って新しいバージョンの Python をインストールしていました。

[ 【2020.8最新】Pythonのインストール法 – Qiita]

が、ふと思って Pythonのバージョンを確認してみるといつの間にか、システム初期バージョンの 2.7.16 に戻ってました。

原因は何かなーと調べてたら、これまた Qiita でまとめらてた記事を発見。

[ pyenvを使ってpythonのバージョンが変更できない時の原因 – Qiita ]

原因としては Python のコマンドパスが変更になっていないことでした。

$ eval "$(pyenv init -)"

でも、.zshrc には記載してるんだけどなー。

$ cat .zshrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

シェルを再起動すると元に戻ってしまう。

$ eval "$(pyenv init -)"
$ python --version      
Python 3.8.5
$ exec $SHELL -l        
$ python --version
Python 2.7.16

またあれこれ調べてたら、これまた Qiita で Python 環境を作成している記事が参考になりました。

[ MacOS CatalinaにPythonとPython向けライブラリをインストールする – Qiita ]

pyenv自体はこれで動作しますが、ターミナルにpyenvの設定を追加しないとpyenv経由でインストールしたPythonが認識されないので、下記のコマンドでターミナルに設定を追加、追加した設定をターミナルに認識させます。

$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc
$ source .zshrc

もちろんvimで直接プロファイル等に書き込んでも問題ありません。

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

んー、pyenv の何をもとに条件分岐をしてるのかさっぱりわからないが、とりあえず上記分岐文 .zshrc に追記することでPythonは pyenv で global 指定したバージョンを使うようになりました。

ProgramExcel,Google スプレッドシート

Excelやスプレッドシートで特定の値をキーにしてデータを抽出する方法として vlookup 関数が有名ですが、vlookup関数の一番の弱点は
「検索キーのリストが一番左側にないとダメ」
ってところです。

vlookup / hlookup 関数の後継関数として xlookup 関数が発表されていますが、現状使える環境はごく一部のテストユーザー向けです。

Microsoft、新しいExcel関数「XLOOKUP」を発表 ~「VLOOKUP」や「HLOOKUP」の後継 – 窓の杜

既存関数の index 関数 と match 関数 でvlookup 関数の弱点を克服した使い方ができますので、覚えておいて損はないと思います。

index / match 関数によるデータ抽出

結論から先に 使い方は

=index("[抽出したいデータの範囲]", match("[検索キー]", "[キーを検索する範囲]", 0))

です。

それぞれの関数の詳細な説明は省きますが、match関数で、検索キーがある行番号を取得して、index関数で取得した行番号に対応するデータを返すといった動きになります。

vloock関数のように、検索キーの場所を選ばないし、取得する列の順番を数える必要もありません。

抽出したいデータ範囲とキーを検索する範囲をそれぞれ名前を付けて、それ上部の式に当てはめればサクっとデータ抽出ができると思います。

Program,WordpressPHP,WP-カスタマイズ

PHP7.2にして、Wordpressを動かして見ると、

count(): Parameter must be an array or an object that implements Countable in …(ファイルパス)/wp-includes/post-template.php on line 284

なワーニングメッセージが。

調べてみるとPHP7.2 になって count関数 が変わった模様。
PHP 公式マニュアル

バージョン 説明
7.2.0 count() will now yield a warning on invalid countable types passed to the array_or_countable parameter.

引数が配列かカウントできるオブジェクトじゃないとワーニングを出しますよー。
ってことになったらしい。

で、件の post-template.php では

if ( $page > count( $pages ) ) // if the requested page doesn't exist
	$page = count( $pages ); // give them the highest numbered page that DOES exist

と $pages がどんなオブジェクトがわからないまま、count関数の引数に使われているのでワーニングが出た模様。

$pages が空(NULL)の場合にワーニングが出るので、count関数を使う前に$pagesが空かどうかのチェックを入れればOK。
空の場合は0を入れてあげます。

if ( ! empty( $pages )) {
    if ( $page > count( $pages ) ) // if the requested page doesn't exist
    	$page = count( $pages ); // give them the highest numbered page that DOES exist
} else {
    $page = 0;
}

コンピュータプログラムの世界では 空(NULL) = 0 かどうかか環境依存だったりするので、ややこしいですね。



ひとまず該当箇所を修正して、ファイルを上書きすればワーニングは出なくなります。

Google / Android,Microsoft Windows,ProgramExcel,Google スプレッドシート

エクセル等でデータ編集等をする時に、一つ上のセルの値を参照することは多々あります。
ただ、イコールで値を参照した際には途中で行の挿入・削除を行うと参照元がずれて大変なことになります。

挿入・削除に影響されない、常に一つ上のセルの値を取得するメモ

=INDIRECT(ADDRESS(ROW()-1,COLUMN()))

ExcelやGoogle スプレッドシートでも動作します。

Google / Android,ProgramGoogle スプレッドシート,Google関係


スプレッドシートの関数で引数の文字列にダブルクォーテーション(“)を使いたい場合のメモ。

文字列括りはダブルクォーテーションのみ

他プログラム言語ではシングルクォーテーションも文字列のくくり文字として使えるケースがありますが、Googleスプレッドシートでは使えません。

またバックスラッシュや、二回続けて入力する等のエスケープ方法も使えません。

ダブルクォーテーションを出力する関数

直接ダブルクォーテーションが入力できないのであれば、ダブルクォーテーションを出力する関数を使えばOKです。

ユニコード表に従って、数値を文字に変換する CHAR() 関数が使えます。
ダブルクォーテーションを出力するには「 CHAR(34) 」です。

そのほかの引数の数字と出力される文字の対応は下記サイトで確認できます。
[ Using the CHAR Function in a Google Docs™ Online Spreadsheet – aubrett.com ]

文字列連結関数 Concatenate を使う

文字列の連結には「&」を使った連結もできますが、個人的には連結関数の Concatenate 関数を使うほうがわかりやすい。
ネックは Concatenate って関数名が長いくらいw

exp)セルA1に入っているHTMLデータの中から正規表現を使ってAタグので指定されているURLを取得する

=regexextract(A1,concatenate("<a href=",char(34),"(.*?)",char(34),".*?>"))



参考サイト
[ GoogleスプレッドシートのCONCATENATEでダブルクォーテーションを使う – dackdive’s blog ]