【Vim】 後ろの空白を一括置換

無駄に混ざる空白

一つ一つ消すのもだるい、でもコードとしては不要なので消したい

コマンド一つで一括置換できるよ、そうvimならね!(大抵のエディタで出来ます)

:%s/ *$//

%s を使って一括置換

%s/[半角スペース]*$//

正規表現はちょっと自信ないんですが、解説をすると%sはvimの文字を置き換えるコマンドです

sed(セド)の頭一文字をとって、sコマンドなんじゃないかなーって勝手に思ってます。

実際のsコマンドの使いかたは、こんな感じ

:%s/置換前文字列/置換後文字列/
追記 置き換える範囲を行で指定する場合

開発あるあるなんですが、末尾の空白を一括で削除したら1000行差分でちゃった☆とかあるって

削除するべきかもしれないんだけど、チェックするのは面倒だったり

実は削除してはいけない記述があって大事故!とか色々あったりするので、置き換え範囲を行指定すると楽ちんでした

:開始行番号,終了行番号s/置換前文字列/置換後文字列/

『$』を置き換えで使うと、指定した文字列で終わる行を置き換える

$ が末尾ということは知っていたのですが、置き換えコマンド使いかたは知りませんでした・・・

置き換えで [スペース]*$ と指定した場合は、末尾が空白という意味になります

参考にしたサイト

arakanoj.com

d.hatena.ne.jp

【Rails】 Routing Error uninitialized constant HogeTestController

RailsでRouting Errorがでた

バージョン: Rails 3.2.13

Routing Error

uninitialized constant HogeTestController
Try running rake routes for more information on available routes.

uninitialized constant HogeTestControllerがでたら確認すること

controller のファイルは存在するのか

一番多いのが、そもそもcontrollerが存在していないケース

app/controller/hoge_test_controller.rbがあるかを確認する

class 名が間違っている

ファイルはあるものの、下記のようにクラス名が間違っている場合、エラーになります

class HogeTesController < ApplicationController

ファイル名が間違っている

今回の原因はこれでした・・・orz

よくあるのは、ファイル名にコントローラを入れるのを忘れちゃったわってケース

app/controller/hoge_test.rb ってなっていたので、renameしてみました

mv app/controllers/hoge_test.rb app/controllers/hoge_test_controller.rb      

バージョンでこの辺は変わるので、そこも要注意

参考にしたサイト

Rails "uninitialized constant ****Controller" の対処法 - プログラミングの詰まりどころを、懇切丁寧に

マタタビ Rails 開発: Rails 2.2.2 > 2.3.5 uninitialized constant ApplicationController でハマリマス

【PHP】コマンドライン実行時のパラメータ(引数)取得 - $argv、$argc

コマンドライン実行時に引数を渡す

業務で数カ月に一回くらい、PHPファイルを作ったり修正したりするんですが、忘れたころにぐぐって、あーこんなんでしたってなるなる。

記事を書いて少しでも覚えられますように。

$argvと$argc

PHPコマンドラインで実行すると、コマンドラインで指定した引数の情報が$argc、$argvという変数に格納されます。 第一引数は必ず、スクリプトのパスが入っているので注意 ※毎回ここでひっかかります…

$ php test.php "param1" "param2"  
$argc '' 引数の数 $argc = 1
$argv '' 引数情報の配列 $ar#コマンドライン実行時に引数を渡す

引数を指定しない場合

こんな場合でも引数は入ってきます。

第一引数にスクリプトのフルパスが入ってきます。

$ php test.php 
$argc '' 引数の数 $argc = 1
$argv '' 引数情報の配列 $argv[0] = "test.php"
サンプルコード
$ php date.php "20141107"  
<?php
  $yyyy = substr($argv[1], 0, 4);
  $mm = substr($argv[1], 4, 2);
  $dd = substr($argv[1], 6, 2);

 echo '引数に指定した日時は{$yyyy}年{$mm}月{$dd}日です'
gv[0] = "test.php", $argv[1] = "param1", $argv[2] = "param2"

引数を指定しない場合

こんな場合でも引数は入ってきます。

第一引数にスクリプトのフルパスが入ってきます。

$ php test.php 
$argc '' 引数の数 $argc = 1
$argv '' 引数情報の配列 $argv[0] = "test.php"
サンプルコード
$ php date.php "20141107"  
<?php
  $yyyy = substr($argv[1], 0, 4);
  $mm = substr($argv[1], 4, 2);
  $dd = substr($argv[1], 6, 2);

 echo '引数に指定した日時は{$yyyy}年{$mm}月{$dd}日です'

【PHP】imput type ="image" で POSTされたkeyに_x _y が付いている

PHPで見覚えのないx や y が付いている

先日、社内の古いプログラムを調査したときに知った、今更な知識

あるところに、二つのファイルがありました…

hoge.php

foreach($_POST as $key =>$value){

  if($key == "add_x"){
    echo "追加だよ"

  elseif($key == "del_x"){
    echo "削除だよ"

  end

end
  • hage.html
--省略

<form action="./hoge.php" method="POST">
  <input type=text name="email" class="address_input">
  <input type="image" name="add" src="./images/add.gif">
  <input type="image" name="del" src="./images/del.gif">
</form>

--省略

単純にhage.htmlのフォームからhage.phpにPOST投げている、平凡なプログラムなんですが、"add_x" と  "del_x" ってどこから出てきたのか…とデザイナーさんと途方にくれました

分かってみればなんてことないない事だったのですが

input type = "image" は座標をPOSTする

要はクリックした位置を渡す仕様のようです ※Enterキーを押した場合は(0, 0)

  <input type="image" name="add" src="./images/add.gif">
  <input type="image" name="del" src="./images/del.gif">

こんな感じである場合、POSTされるのは add_x, add_y, del_x, del_y のkeyです(多分)

で、先述のPHPのプログラムの意図はこんな感じじゃないでしょうか

  • 座標ば別にいらない
  • 複数の画像ボタンを設置したかった
  • 複数の画像ボタンの判別をしたかった

注意するところ

もし判定に使うのなら、_xだけではなく、yも入れてほしいな

_xだけだとぱっと分からないけれど、xとyがあればなんとなく”座標かな”って思う(かもしれない)

古いプログラムだと、何も考えずに_xのname付ける人もいそうだしね

普段からx、yのnameは使わない

逆に_x は座標のパラメータだ!って先入観で無駄な手間がかかりそう。

なので、極力使わないほうが良いなって思いました。

使えなくなる機能がある

  • form.submit() が使えなくなる
  • input=textでenter送信とかできない

botや不正対策に使えそうな気がしてきた

brand ってロゴの画像を置いておいて、aをクリックしてください、と書いておいて座標で判断する

ちょっとしたフォーム送信とか、掲示板とかに使えそうだけど聞いたことはないw

パーフェクトPHP

パーフェクトPHP