@9StarRu

Как из txt или csv файла, из строки получить нужные данные и вернуть обратно в строку?

Мне необходимо после загрузки файла на сервер (csv, txt) найти в строке поле Email, провести работу с данным полем и вернуть результат обратно в стоку, сохранив ее целостность.

Т.е. если в строке есть отличные от Email поля их нужно вернуть в строку и сохранить.

Пример файла:

Name, Email, Phone

Вова, test@test.ru,
Вася, test2@test.ru, 89990001234
Игорь, test3@test.ru,,предприниматель, Москва

Вот что я делаю (построчно):

$fp = @fopen("uploads/file.csv", "r");
if ($fp) {
    while (($buffer = fgets($fp, 4096)) !== false) {

        echo $buffer;
    
        // выполнить действие над email и сохранить результат
        // КАК ЗДЕСЬ ПОЛУЧИТЬ EMAIL ИЗ СТРОКИ И ДАЛЕЕ СОХРАНИТЬ СТРОКУ ЦЕЛИКОМ
    


    //$list = array (
    //    array('')
    //);

    //$fp = fopen('file_ed.csv', 'a');

    //foreach ($list as $fields) {
    //    fputcsv($fp, $fields);
    //}

    //fclose($fp);


    
    }
    if (!feof($fp)) {
        echo "Ошибка: fgets() неожиданно потерпел неудачу\n";
    }
    fclose($fp);
}


Смысл в том, чтобы обработать любой файл с любым количеством полей, получить поле Email и вернуть в файл сохранив его изначальную структуру. Чтобы скрипт мог работать даже с самыми замысловатыми файлами и не отдавал ошибок.
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если надо изменить одну строку:
1. Открываете файл в режиме rw, захватываете его в эксклюзивное пользование, во избежание состояния гонки.
2. Считываете все строки через fgetcsv, пока не найдёте нужную, запоминая позицию считанной строки.
3. Считываете в массив все строки до конца файла.
4. Вносите нужные вам изменения в данные.
5. Перемещаете указатель файла на запомненную позицию.
6. Записываете изменённую строку.
7. Из массива записываете все сохранённые строки.
8. Закрываете файл, освобождая блокировку.

Если надо изменить все строки:
1. Открываете исходный файл на чтение.
2. Открываете новый файл на запись.
3. Построчно читаете первый файл через fgetcsv, работаете с данными строки и записываете через fputcsv в новый файл.
4. Закрываете оба файла.

А вообще, для таких вещей давно придумали базы данных.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы