2021년 목표설정

이미지
기본적으로 작년에 달성하지 못한 것들을 하려고 생각중인데..코로나가 언제까지 이어질지, 한국이나 북해도는 갈 수 있을지..자격증은 응시 가능할지..여러가지가 불확실하다. 2021년은 무엇보다 정신적인 부분과 경제적인 부분에 중점을 두고 조금 더 치열하게 지내보고 싶다. 일본나이로도 30대 마지막 해, 이제 불혹에 접어드는 나이..복잡하지만 심플하게. 육체적목표 : 트라이에슬론 스탠다드 도전하기 정신적 : 자격증2개 도전 + 자체개발 서비스 론칭 가족적 : 가정의 평화를 유지하기 경제적 : 외식과 유흥비를 줄이고 부수입을 늘려서 결과적으로 저축하기 사회적 : 목표세미나를 포함해서 민단과 개인인맥의 활성화와 교류를 촉진하기

cakephp3 에서 특정csv파일을 읽어오는 코드 예시

<?php
namespace App\Shell;
# shell 用なので名前空間もそれ用に指定する

#使うすべてのクラスを読み込む
use App\Controller\AppController;
use Cake\Filesystem\Folder;
use Cake\Filesystem\File;
use Cake\Console\Shell;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;


class csv_reading extends Shell
{
    #コマンドラインからシェルを実行するとデフォルトで main 関数が呼ばれるらしいので main に指定。ここに関数をしたい場合はコマンドラインの第二引数にその関数を指定すれば大丈夫だと思います。
    public function main()
    {
        // それぞれの変数を指定(変更する場合はここをかえるだけで大丈夫だと思います)
        // csv ファイルの置き場を指定
        $FILE_PATH = "hogehoge.csv";
        // 作成したテーブル名を指定
        $TABLE_NAME = 'hogehoge_import';
        // CSV のファイルを読み込むオブジェクトの準備
        $file = new \SplFileObject($FILE_PATH);
        $file->setFlags(\SplFileObject::READ_CSV);

        //data の配列を初期化
        $csv_data = array();

        //多次元配列の番号のため初期値をセットしておく
        $COUNT = 0;

        //for文で一行ずつ判定
        foreach ($file as $row) {
            if ($row === [null]) continue;
                //ヘッダーが空ならそれを入れるのだがよく不明
                if (empty($header)) {
                    $header = $row;
                continue;
                }
                $COUNT = $COUNT + 1;
                //多次元配列でCSVのデータを取得
                $csv_data[$COUNT]["id"] = $COUNT;
                $csv_data[$COUNT]["hogehoge_id"] = $row[0];
                $csv_data[$COUNT]["name"] = $row[5];
        }

        // hogehoge_importのテーブルのモデルを取得
        $articles = TableRegistry::get($TABLE_NAME);

        // Entities作成
        $query = $articles->query();
        $query->insert(['id','hogehoge_id','hogehoge_name']);
        // 先ほどの $data 変数に入っている多次元配列のデータを回して全部のデータに対してセーブする。
        foreach ($csv_data as $insert_data) {
             //実際にセーブする
            $query->values($insert_data);
        }
        $query->execute();
    }
}

댓글

이 블로그의 인기 게시물

[메모] PostgreSQL에서 Insert 하는 경우 자동채번 PK가 중복에러 나는 경우

[C# & LINQ] 랜덤으로 데이터를 한 개 추출하는 방법

[react-native] uuid 생성이 에러가 날 때 대처법