Как читать столбцы из текстового файла и вставлять в базу данных php - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть текстовый файл с несколькими строками и столбцами внутри.

Я хочу прочитать все строки и столбцы, сохранить их в массиве и сохранить все данные в базе данных, используя cakephp.

Ниже приведен мой код, я написал некоторую логику чтения строк и столбцов, которую я хочу реализовать.

Пожалуйста, помогите мне сделать эту важную вещь.

public function importfile(){
        $fp = 'C:/wamp64/www/jhraut/webroot/uploads/120518SU';
        $handle = fopen($fp, "r");
        if ($handle) {
            while (($line = fgetc($handle)) !== false) {

                $data['GunNo'] = "first 5 characters of $line is GunNo than 1 character is space";
                $data['FatGun'] = "Second 3 characters of $line is FatGun than 1 character is space";
                $data['LoinGun'] = "Third 3 characters of $line is LoinGun than 1 character is space";
                $data['ScaleWt'] = "fourth 5 characters of $line is ScaleWt than 1 character is space";
                $data['Partial'] = "if P or M than 1 character is space";
                $data['TimeofReading'] = "last 8 characters of $line is TimeofReading";
                echo $line;
            }
            $this->Event_program->saveAll($data);
        }        
        fclose($fp);
        exit;
    }

Мой файлданные

parti 011 058 145.6 P  06:37:01
00002 016 049 175.8    06:37:08
00003 009 072 150.8    06:37:15
00004 009 053 146.8    06:37:22
00005 011 054 169      06:37:29
00006 009 052 152.4    06:37:37
00007 018 059 194.8    06:37:44
00008 009 060 139.4    06:37:51
parti 008 069 134.8 P  06:37:58
00010 023 054 194.2    06:38:05
miss          197.2    06:38:13
00011 023 052 150      06:38:20
00012 008 059 146.6    06:38:27
00013 010 067 156      06:38:34
00014 013 049 190.8    06:38:41

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Используйте регулярное выражение. Поскольку у вас есть несколько строк с несколькими полями, разделение пробелом может вызвать проблемы.

preg_match('/(.{5}) (.{3}) (.{3}) (.{5}) (.{1})  (.{8})/', $line, $op);

$data['GunNo'] = $op[1];
$data['FatGun'] = $op[2];
$data['LoinGun'] = $op[3];
$data['ScaleWt'] = $op[4];
$data['Partial'] = $op[5];
$data['TimeofReading'] = $op[6];
echo $op[0];

Вы можете задать строку регулярного выражения на

https://www.phpliveregex.com/#tab-preg-match

0 голосов
/ 01 апреля 2019

Попробуйте что-то вроде этого:

// set path to file
$file = WWW_ROOT.'uploads/120518SU';
// check if file exists
if (file_exists($file)) {
   // Reads an entire file into an array with file() method
   // and loop array 
   foreach (file($file) as $line) {
      // convert line value to new array
      $arr = explode(' ', $line);

      // do something with your data..
      $data = [
         'GunNo' => $arr[0],
         // ...
      ];

      $entity = $this->EventProgram->newEntity($data);
      $this->EventProgram->save($entity);
   }
}

Обновите с некоторым тестом:

$line = '00003 009 072 150.8    06:37:15';
$arr = explode(' ', $line);

print_r($arr);

// output

Array
(
    [0] => 00003
    [1] => 009
    [2] => 072
    [3] => 150.8
    [4] => 
    [5] => 
    [6] => 
    [7] => 06:37:15
)

$line = 'parti 008 069 134.8 P  06:37:58';

// .. 

Array
(
    [0] => parti
    [1] => 008
    [2] => 069
    [3] => 134.8
    [4] => P
    [5] => 
    [6] => 06:37:58
)

Тогда:

// do something with your data..
$data = [
   // ...
  'TimeofReading' => end($arr),

];

Обновление: чтение в виде файла csv

Использование fgetcsv ()

Функция fgetcsv () анализирует строку из открытого файла, проверяя поля CSV.

Функция fgetcsv () перестает возвращаться на новой строке, на указанной длине или в EOF, в зависимости от того, что наступит раньше.

Эта функция возвращает поля CSV в массиве в случае успеха или FALSE в случае ошибкии EOF.

fgetcsv(file,length,separator,enclosure);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...