читать текст из файла через. php и сохранять части в переменной - PullRequest
0 голосов
/ 06 мая 2020

Проблема заключается в чтении текста из файла и подготовке и сохранении указанного c текста в переменные для вставки в базу данных. Примерно так: https://www.wdb24.com/php-read-text-file-and-insert-into-mysql-database/

Данные измерений / импорта выглядят так:

    1=19-10-18 10:02:06
    2=+1.313026E+00 l/s 
    3=+1.671796E-01m/s
    4=+1.500691E+02m3 
    5=+1.501138E+02m3 
    6=+0.000000E+00m3 
    1=19-10-18 10:03:06
    2=+1.266786E+00 l/s 
    3=+1.612923E-01m/s
    4=+1.501403E+02m3 
    5=+1.501850E+02m3 
    6=+0.000000E+00m3 
    1=19-10-18 10:04:06
    2=+1.597391E+00 l/s 
    3=+2.033861E-01m/s
    4=+1.502291E+02m3 
    5=+1.502738E+02m3 
    6=+0.000000E+00m3
     .
     .
     . 

Всегда только первые три строки (1 = ... 2 =. ..3 = ...) из шести повторяющихся строк необходимо сохранить в таких переменных, как $ first, $ second, $ third. Возможно, как массив, потому что мне нужно сохранить текстовые данные в ОДНОМ ПОЛЕ в базе данных

$ first = 19-10-18 10: 02: 06,19-10-18 10: 03: 06,19-10 -18 10:04:06 // от 1 =

$ секунда = + 1.313026E + 00, + 2.333026E + 00, + 2.123026E + 00 // от 2 =

$ третий = + 1.671796E-01,1.87794E-01,1.34146E-01 // from 3 =

У меня небольшая часть кода, пожалуйста, помогите с подготовкой данных (вставка в базу данных не проблема).

    <?php

$file=fopen("test_file/test.txt", "r");

while(!feof($file)){

    $content=fgets($file);
    $content=explode(PHP_EOL,$content);  //break line?
    //list($first,$second,$third,$four,$five,$six)=$content;
    var_dump ($content); //result is some strange array, can't call $content[0] in some loop...


}


fclose($file);

?>

Результат какой-то странно выглядит массив или нет? Я php новичок, заранее спасибо за любые предложения, ссылка ...

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

id | отметки времени | values1 | values2

1 | много раз | manyValues ​​| manyValues ​​

2 ............

Итак, в этом случае есть только одна таблица с множеством измерений.

1 Ответ

1 голос
/ 06 мая 2020

Ваш код будет выглядеть примерно так:

<code><?php

$handle = fopen("inputfile.txt", "r");
$lineVariables = [];
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        $tmp = explode('=', $line);
        $lineVariables[trim($tmp[0])][] = trim($tmp[1]);
    }
    fclose($handle);

    $result = [];
    foreach ($lineVariables as $key => $variable) {
        $result[$key] = implode(', ', $variable);
    }

    echo '<pre>' . print_r($result, true) . '
'; } else {// ошибка при открытии файла. }

Вывод:

Array
(
    [1] => 19-10-18 10:02:06, 19-10-18 10:03:06, 19-10-18 10:04:06
    [2] => +1.313026E+00 l/s, +1.266786E+00 l/s, +1.597391E+00 l/s
    [3] => +1.671796E-01m/s, +1.612923E-01m/s, +2.033861E-01m/s
    [4] => +1.500691E+02m3, +1.501403E+02m3, +1.502291E+02m3
    [5] => +1.501138E+02m3, +1.501850E+02m3, +1.502738E+02m3
    [6] => +0.000000E+00m3, +0.000000E+00m3, +0.000000E+00m3
)

Объяснение

В цикле while вы читаете строки следующим образом:

$line = fgets($handle)

Затем вы нужно обработать эти строки. Поскольку индекс переменных - это первый символ, отделенный от строковых переменных, которые вы хотели бы добавить к строкам, вы можете использовать функцию explode , используя символ '=' в качестве разделителя.

Тогда в массиве $ tmp у вас будет 2 элемента: $tmp[0] будет содержать индексы результата. И $tmp[1] будет содержать оставшуюся часть строки.

Например, первая строка:

$tmp[0] // contains 1
$tmp[1] // contains 19-10-18 10:02:06

После цикла while наш $lineVariables будет выглядеть так:

Array
(
[1] => Array
    (
        [0] => 19-10-18 10:02:06
        [1] => 19-10-18 10:03:06
        [2] => 19-10-18 10:04:06
    )

[2] => Array
    (
        [0] => +1.313026E+00 l/s
        [1] => +1.266786E+00 l/s
        [2] => +1.597391E+00 l/s
    )

[3] => Array
    (
        [0] => +1.671796E-01m/s
        [1] => +1.612923E-01m/s
        [2] => +2.033861E-01m/s
    )

[4] => Array
    (
        [0] => +1.500691E+02m3
        [1] => +1.501403E+02m3
        [2] => +1.502291E+02m3
    )

[5] => Array
    (
        [0] => +1.501138E+02m3
        [1] => +1.501850E+02m3
        [2] => +1.502738E+02m3
    )

[6] => Array
    (
        [0] => +0.000000E+00m3
        [1] => +0.000000E+00m3
        [2] => +0.000000E+00m3
    )

)

Теперь вы можете закрыть файл и сосредоточиться на преобразовании результата в желаемый вид. Мы собираемся сохранить результат в переменной $result, которая является массивом, и один элемент массива будет представлять один желаемый результат, а индексы в массиве будут ссылкой на первый числовой символ в строках.

Чтобы добавить элементы $lineVariable для каждой строки, мы можем использовать функцию implode , которая является своего рода противоположностью функции разнесения. Для одного сингла это преобразует это:

Array
    (
        [0] => 19-10-18 10:02:06
        [1] => 19-10-18 10:03:06
        [2] => 19-10-18 10:04:06
    )

В эту единственную строку строки:

19-10-18 10:02:06, 19-10-18 10:03:06, 19-10-18 10:04:06

Итак, мы просто go прошли через подготовленный $lineVariables и обработаем элементы в желаемый формат.

Вот и все.

...