はてなあたまさんのブログです。

WEB開発勉強中でーす

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コマンドのオプションの詳細

Linuxgrepコマンドのオプションの詳細


基本的に

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);

結果値:

f:id:ryumirr1:20211020222034p:plain

こんな感じになります!!!

f:id:ryumirr1:20211020222439p:plain

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)とは

  • 2-2 パッケージ管理システム(PMS)→ PMS Utilityの機能(コマンド)


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

まず、1.Debian Base(ubuntu) 系では

(command)dpkgという「PMS Utility」を使います。


dpkgというコマンドは

PMSと相互作用をするため(Shellのようなやつ。)のコマンドです。


一旦、ソフトウェアをインストール・・・などなどをするために、dpkgコマンドを使用します。

*dpkgとrpmというやつらはPMSでの中心部と言えます。
つまり、範囲的には dpkg != PMSですね!

dpkgとrpmは利用しにくいとよく知られています!そのため、Linux先輩(?)達はもっと使いやすそうな

コマンドをたくさん作っておきましたー!!


question:) →→
もっと使いやすそうなコマンド(ex, yum)をたくさん作っておく理由???

rpmはディペンデンシーがインストールされませんので、直接手動で1つ1つ全てのディペンデンシーを

インストールしなければなりません。

一方、yumは絡んでいるディペンデンシーまで一気にインストールされますので

楽だし、便利です。


(現在本人が使っているのがRedhat なので、これだけ記述します)


Redhat Base(CentOS) 系では

各自のシステムのfrontend toolを持っています。

(frontend toolとは、あるアプリケーションに入るための入り口みたいな意味)

frontend toolの中で、一番使われているのが


みんなよく知っている「yum 」です!!!

frontend toolは追加されたユーティリティーですが、当たり前というか全部 rpm コマンドを基盤としてます。:)


具体的なコマンドの(機能)の詳細については2-2で記録しておきます。

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];を使って

コミットしちゃって指摘してもらったので記録・・!!