- Linux
-
2019-11-02
コマンドたった1行打つだけで、テキストファイルを結合することができます。
Linuxの場合
$ cat *.csv > all/all.csv
Windowsの場合
$ type *.csv > all/all.csv

コマンドたった1行打つだけで、テキストファイルを結合することができます。
Linuxの場合
$ cat *.csv > all/all.csv
Windowsの場合
$ type *.csv > all/all.csv
PHPにはファイルの有無を調べるfile_existsという便利な関数がありますが、
外部サーバーのファイルを確認することはできません。
そこで、HTTPヘッダーを取得し、ステータスコードからファイルの有無を確認してみましょう。
まずはHTTPヘッダーを取得。
$response = get_headers([任意のURL]);
取得したヘッダーからステータスコードを抜き出す。
ステータスコードは配列で返ってきたヘッダーの先頭にあるので、$response[0]の中から数字3桁をpreg_matchを使って抜き出します。
preg_match("/.*(\d{3}).*/", $response[0], $matches);
HTTPステータスコードを数値に変換。
$response_code = intval($matches[1]);
ステータスコードが200であればファイルが存在する、ということになります。
関数を作ると次のような感じになります。
function myFileExists($str_path) { // HTTPヘッダーを取得 $response = get_headers($str_path); // HTTPステータスコードを抜き出す if(preg_match("/.*(\d{3}).*/", $response[0], $matches)) { // HTTPステータスコードを取得 $response_code = intval($matches[1]); if($response_code == 200) { return true; } else { return false; } } else { return false; } }
以前、PHPでの日付の加算・減算についてご紹介しました。
その時の記事はこちら↓
日付の加算・減算 DateTimeクラス
その際、月の加減については31日が加減されると記載しました。
例えば12月31日に2ヶ月を加算した場合は、翌年の3月3日になります。
今回はそのような事態にならない回避方法をご紹介します。
// 基準とする日付のオブジェクトを生成する $myDate = new DateTime("2018-12-31"); // 新規日付オブジェクトを生成 $newDate = new DateTime(); // 2ヶ月後の末日を取得 $newDate->setDate($myDate->format("Y"), $myDate->format("n") + 2 + 1, 0);
※日付に「0」を指定することで前月の末日を取得することができます。
3ヶ月前の末日を取得する
// 2ヶ月を加算する $myDate->add(new DateInterval("P2M")); echo $myDate->format("Y-m-d")."\n"; echo $newDate->format("Y-m-d")."\n";
ここでの出力結果
2019-03-03 2019-02-28
// 基準日オブジェクトと2ヶ月後末日との差を求める $result = $myDate->diff($newDate); //$resultには日付の間隔を表すDateIntervalオブジェクトが返されます。 if($result->invert == 1) { //間隔が負の数になっている場合は 1、そうでない場合は 0 echo "newDate\n"; echo $newDate->format("Y-m-d"); } else { echo "myDate\n"; echo $myDate->format("Y-m-d"); }
出力結果は以下のようになります。
newDate 2019-02-28
[設定]-[日付と時刻]-[地域]の地域設定データのところで「データ形式を変更する」をクリックし、
「日付(短い形式)」のところをyy/mm/dd形式に変更します。
通常は上記設定でパソコンの日付表示はyy/mm/dd形式に変更されるはずです。
しかし、Outlookを開くとこの設定が元に戻されるという現象が発生しています。
そのような現象が発生するのは以下のような環境
Windows 10 Pro
Microsoft Office 2013, 2016
以下のようなレジストリファイルを作成し、ダブルクリックすれば短い形式の
設定をレジストリに書き込んでくれます。
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Control Panel\International] "sShortDate"="yy/MM/dd"
しかし、Outlookを起動するとまた元の設定に戻ってしまうので
その度に実行する必要がありとても面倒です。
そこで次のような対処方法を発見しました。
タスクバーの検索窓に「gpedit.msc」と入力し、Enterを押します。
「ローカルグループポリシーエディター」が表示されます。
[コンピュータの構成]-[管理用テンプレート]-[システム]-[ロケールサービス]を開きます。
その中にある「ユーザーオーバーライドによるロケール設定を禁止する」をダブルクリックして
設定画面を開き、未構成・有効・無効の選択肢を有効に設定します。
これによりOutlookを起動しても、元の設定に戻ることはありません。
ただし逆に、設定でyyyy/mm/ddにしようとしてもその変更は反映されなくなります。
ACCESSにて、コードでリンクテーブルを設定した時など、非表示にしていたナビゲーションウィンドウが表示されてしまうことがあります。
以下のコードを実行するとナビゲーションウィンドウを再び非表示にすることができます。
DoCmd.NavigateTo "acNavigationCategoryObjectType", "" DoCmd.RunCommand acCmdWindowHide
また、逆に表示したいときは以下のようにします。
DoCmd.NavigateTo "acNavigationCategoryObjectType", "" DoCmd.RunCommand acCmdWindowShow