csvインポートする時、”¥n”(改行コード)が入っていると認識されてしまった件
csvをインポートする時、”¥n”(改行コード)が入っていると認識されてしまった。
めっちゃくちゃ普通な(?)コードで
どこが間違っているかしらんかったが・・
犯人は「SplFileObject」オブジェクトの
setFlagsというcsvファイルを読み込むフラグを
指定するやつでした・・・。
$file->setFlags(
\SplFileObject::READ_CSV |
\SplFileObject::SKIP_EMPTY |
\SplFileObject::READ_AHEAD |
\SplFileObject::DROP_NEW_LINE <-問題のやつ
);
ここで
SplFileObject::DROP_NEW_LINE
というのが設定されていると改行が入っていると
改行されてしまいそうだった。
DROP_NEW_LINE フラグを削除したら問題なくうまく
いけた!!
英語版マニュアルには
SplFileObject::DROP_NEW_LINE
Drop newlines at the end of a line.
と書いてあるので、そう思っている!
日本語版はなんか難しい説明だったT-T
テストコードは
public function csvReading():String
{
$f = WWW_ROOT . "222.csv";
$file = new \SplFileObject($f);
$file->setFlags(
\SplFileObject::READ_CSV |
\SplFileObject::SKIP_EMPTY |
\SplFileObject::READ_AHEAD
);
$list = "<table>";
while(!$file->eof()){
$line = $file->fgetcsv();
$list = $list . "<tr>";
foreach ($line as $a) {
$list = $list . "<td>" . $a . "</td>";
}
$list = $list . "</tr>";
}
$list = $list . "</table>";
return $list ?? "";
}
定義済み定数 ¶
SplFileObject::DROP_NEW_LINE
行末の改行を読み飛ばします。
SplFileObject::READ_AHEAD
先読み/巻き戻しで読み出します。
SplFileObject::SKIP_EMPTY
ファイルの空行を読み飛ばします。期待通りに動作させるには、READ_AHEAD フラグを有効にしないといけません。
SplFileObject::READ_CSV
CSV 列として行を読み込みます。
Linux基本コマンド一覧
コマンド / オプション
ls ディレクトリ情報の表示
-a システムファイル表示
-l ロングフォーマット
-d 指定のディレクトリ情報のみ表示
cd ディレクトリの移動
cp ファイルのコピー
-i インタラクティブモード
-p ファイルの属性を維持
-R 丸ごとコピー
-v コピーされたファイル名の表示
mv ファイルの移動ファイル名の変更にも使えます。
mv 元ファイル名 新ファイル名
rm ファイルの削除
-r ディレクトリとディレクトリ内の全てのファイルを削除。
確認なしに全部消えちゃうので要注意です!
cat テキストファイルの内容を表示
-n 行数表示
touch ファイルのタイムスタンプの変更。
ファイルが存在しない場合は空ファイルが作られる
mkdir フォルダ作成
-p 入れ子のフォルダを一気に作成
man マニュアルの表示
Linux→grepコマンドのオプションの詳細
Linux→grepコマンドのオプションの詳細
基本的に
grep (–オプション) 検索する正規表現 ファイル名
みたいな感じでgrepを使っています。
grepに使えるオプションリスト
-i
大・小文字を区別せず検索
-E
拡張正規表現で検索です。 2つの条件のどちらかに当てはまっているものを検索するやつです。 検索のために ①|(or)を使かいます。それは拡張正規表現を使う前提条件があります。
-e
一致処理に指定した正規表現検索を行いますが、 「or」としての検索を行う時に使います。
ex)grep –e 正規表現1 –e 正規表現2 ファイル名
-v
一致しないものを検索(除外)
-n
検結果に行番号を表示
-l
検索結果にファイル名のみ表示
-h
検索結果にファイル名を表示しないものです。 該当箇所のみ表示されます。
-o
検索結果に一致した文字を表示する
-r
カレントフォルダ(サブフォルダ含む)で特定の文字含むファイル一覧
まとめ
例(スクショとかの)は今度アップデートする予定です。
似ているが、違うコマンドとして「find」がありますが、
今度2つのコマンドを比較したいです。
2つを併用して使うこともできるらしく、
平日に調べてみます。
PHP ->「、」が含まれている文字列の比較判定。string to integerの場合。
「、」が含まれている文字列をint値として比較したいの場合、
'444,444' と'1,000,000'を数字として比較したいですが、
すぐintval('444,444' )しちゃうと「、」の前までの数字しか出なくなります。
その場合にはコンマを str_replace 関数を利用して削除してから比較しましょう!!!
$a = str_replace(',', '', '444,444');
$b = str_replace(',', '', '1,000,000');
var_dump(intval(str_replace(',','','1,000,000')));
var_dump($a<$b);
結果値:
こんな感じになります!!!
intval converts doubles to integers by truncating the fractional component of the number.
2.1 Linuxのパッケージ管理システム(PMS)→ ソフトウェアパッケージ(software package)
2. Linuxのパッケージ管理システム(PMS)
2-1 ソフトウェアパッケージ(software package)とは
他の言い方で「リポジトリ」といいます。
普段サーバに存在し、インターネットでアクセスが 可能です。
インターネットにアクセスするため使う「PMS Utility」ということがあります。
このPMS Utilityを利用してソフトウェアパッケージを検索できるし、
既にLinuxシステムにインストールされているソフトウェアパッケージのバージョンアップが可能です!!
とにかく、LinuxシステムはPMS Utilityを利用して、ソフトウェアパッケージを管理する形です。
因みに、このソフトウェアパッケージには多くの場合にディペンデンシーというやつが一緒にくっついてます!!
ディペンデンシーとは”他のパッケージ”で、
特定ソフトウェアパッケージが正常に動作するために
必要なパッケージをディペンデンシー(DI)と呼びます。
2-2 パッケージ管理システム(PMS)
ソフトウェアのインストールで一番大事なのはパッケージ管理システム(PMS)
ex) centOS,Fedoraのような全てのLinuxのデプロイメント版は例外なく何かの(PMS)を採用しています。
PMSをどうして使うのかとすると
PMSを通してソフトウェアアプリケーションのライブラリを
インストールするところに使用します。
PMSはデータベースを使用し、データベースを通じて
インストール・ダウンロードのファイルを管理します!!
現在、Linuxシステムにどのようなソフトウェアパッケージがインストールされているのか。
各パッケージにどのようなファイルが存在しているか。
また、インストールされたソフトウェアパッケージのバージョンはどうなっているのかなどの
情報を管理しています!!!
2-2 パッケージ管理システム(PMS)→ PMS Utilityの機能(コマンド)
「PMS Utility」はソフトウェアパッケージのDIを探知して、必要な場合には
(インストールしたい場合)インストールができるようにしてくれます。
「PMS Utility」の短所は
標準の「PMS Utility」が存在してないということです。
それため、「PMS Utility」のコマンドがLinuxのデプロイメント版により色々変わります。
まず、世界的に有名なLinuxのデプロイメント版!! ー>これは、Linux次第がオープンソースなので、全部異なります。
1.Debian Base(ubuntu)
2.Redhat Base(CentOS)
大体のLinuxユーザーは(ほぼ99%)この2つの種類を使っていますので、
一般的にこの2つのLinuxを勉強します!!
一般的にこの2つのLinux
(command)dpkgという「PMS Utility」を使います。
dpkgというコマンドは
PMSと相互作用をするため(Shellのようなやつ。)のコマンドです。
一旦、ソフトウェアをインストール・・・などなどをするために、dpkgコマンドを使用します。
*dpkgとrpmというやつらはPMSでの中心部と言えます。
つまり、範囲的には dpkg != PMSですね!
dpkgとrpmは利用しにくいとよく知られています!そのため、Linux先輩(?)達はもっと使いやすそうな
コマンドをたくさん作っておきましたー!!
question:) →→
もっと使いやすそうなコマンド(ex, yum)をたくさん作っておく理由???
rpmはディペンデンシーがインストールされませんので、直接手動で1つ1つ全てのディペンデンシーを
インストールしなければなりません。
一方、yumは絡んでいるディペンデンシーまで一気にインストールされますので
楽だし、便利です。
(現在本人が使っているのがRedhat なので、これだけ記述します)
各自のシステムのfrontend toolを持っています。
(frontend toolとは、あるアプリケーションに入るための入り口みたいな意味)
frontend toolの中で、一番使われているのが
みんなよく知っている「yum 」です!!!
frontend toolは追加されたユーティリティーですが、当たり前というか全部 rpm コマンドを基盤としてます。:)
具体的なコマンドの(機能)の詳細については2-2で記録しておきます。
オブジェクトか変数が空っぽか確認する時
!empty($arr)を使うのは配列のみで
変数の場合は
ただのif ($hensu)で判定できるので
より短い書き方で解決できる!!!:)
fetch(PDO::FETCH_ASSOC)について
*データ複数の場合 $pppp= $query->fetchAll(PDO::FETCH_ASSOC)[index];
*データ1つの場合 $pppp= $query->fetch(PDO::FETCH_ASSOC);
このような形で、戻り値が単数か複数かを考えて
fetchかfetchAllを使うのが効率的!!
-> 昨日、何も考えずに絶対に1つを値を返すquery値にfetchAll(PDO::FETCH_ASSOC)[0];を使って
コミットしちゃって指摘してもらったので記録・・!!