5

Поиск в файлах CSV через базу данных

Имеется папка с большим количеством файлов формата CSV, все они одной структуры(столбцы одинаковы)

Файлы CSV являются текстовыми и имеют структуру через разделение символом ;

Сделаем обработку файлов и сохранение в базу данных

В общем виде, открываем файл на чтение, читаем каждую строку, получаем данные столбцов и сохраняем в таблицу:

$DIR = 'data/';
$files = scandir($DIR);
foreach($files as $k => $file)if($file!='.'&&$file!='..'){
$cfile = $DIR.$file;
$pi=pathinfo($cfile);
$open = fopen($cfile, "r");
$strnum=0;
while (($data = fgetcsv($open, 10000, ";")) !== FALSE){
$data = array_map( "convert", $data );
if($strnum>$proc['pos']){
DB_insert($DB,$data,$file);//записываем в таблицу
}
}
fclose($open);
}
function convert( $str ) {//преобразуем кодировку для базу данных
return iconv( "Windows-1251", "UTF-8", $str );
}

Код обходит указанную папку, открывает каждый файл и заносит данные в базу данных. Процесс долгий и его необходимо выполнять в консоли или реализовывать процесс сохранения этапа работы в отдельный файл и при новом вызове брать параметры.

function DB_insert($DB,$data,$file){
$values = array();
$kol=0; $i=0; foreach($polya as $k => $v){
if(isset($data[$i])&&$data[$i]!='') $values[] = '"'.$DB->rescape($data[$i]).'"';
else { $values[] = '""'; $kol++; }
$i++;
}
if(count($polya)!=$kol){
$sql = 'INSERT INTO tablevins VALUES(0,"'.$DB->rescape($file).'",'.implode(',',$values).');';
$rez = $DB->QUR($sql);
}
}

Реализация WEB интерфейса для поиска данных

Поиск происходит по двум полям VIN и номеру кузова. Опция «тип поиска» позволяет объединять искомые по условию «И» или «ИЛИ»

Функция для поиска в таблице данных, универсальная и получает опции поиска через переменную $data

function DB_search($DB,$data){
$out = array(); $usl = array();
foreach($data['where'] as $k => $v){ if($v!=''){
$usl[] = $k.' LIKE "%'.$DB->rescape($v).'%"';
}
}
if(count($usl)){
$tip = ' OR '; if($data['tipsearch']==1) $tip = ' AND ';
$sql = 'SELECT * FROM tablevins WHERE '.implode($tip,$usl);
$rez = $DB->QUR_SEL($sql);
if(!$rez['err']&&$rez['kol']){ $out = $rez['rez']; }
}
return $out;
}

Более подробно можно посмотреть на https://alneo.ru/2022/12/poisk-v-fajlah-csv/

Правила сообщества

- запрещено добавлять посты отличной от мира программирования тематики (так как пикабу - это в первую очередь развлекательный ресурс, то посты с юмором, историями, изображениями и всем, что связано с php - разрешены);

- запрещено добавлять посты с содержанием в виде вопроса, или просьбы о помощи, для этого есть тематические ресурсы;

- запрещено добавлять посты провакационной тематики, нацеленные на бессмысленные споры и оскарбления;

- в копипастах и переводах указывайте источники;

1
Автор поста оценил этот комментарий

Думаю что на Хабре за такой код отхуесосят гораздо качественне чем здесь.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

По личному опыту?

показать ответы
1
Автор поста оценил этот комментарий

Да, и я тоже присоединюсь если увижу.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Надеюсь научились программировать грамотно.

0
Автор поста оценил этот комментарий

Открыл чтоб написать это :) Только LOCAL добавьте, пусть с локальной машины файлы берет. Думаю что у студента с такими познаниями вряд ли есть доступ к серверу.


@PHPProg слабо выложить на Хабр? ;)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

думаете на Хабре нужно это? Хабр давно стал для профессионалов, такое там не приветствуется

показать ответы
0
DELETED
Автор поста оценил этот комментарий

Не проще было awk заюзать?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да проще, для одного, возможно даже для большинства, можно и на Windows решить, но нужен был визуальный интерфейс и возможно доп. плюшки

1
Автор поста оценил этот комментарий

А просто так в текстовых файлах разве искать нельзя?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

У клиента около 500-600 файлов разного размера до 10Гб и ему тяжело

показать ответы
1
Автор поста оценил этот комментарий

LOAD DATA INFILE '/tmp/file.csv' into table...


Но велосипеды тоже нужны)

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, тоже можно, но если файл удовлетворяет всем требованиям и все поля имеются - такое лучше подойдет если файл ранее выгружали из базы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества