Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Найти совпадения по всему файлу CSV

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
EpcMaster
Отправлено: 25 Февраля, 2016 - 00:01:24
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2016  


Помог: 0 раз(а)




Помогите решить задачу!
Голову уже сломал.

Есть CSV файл, в котором построчно находятся данные

17.12.15;01:11:57;Имя;Фамилия;RU;178.70.69.242;1;123;
18.12.15;05:45:43;Имя2;Фамилия3;RU;456.74.39.432;1;123;
18.12.15;09:24:32;Имя3;Фамилия4;RU;178.70.69.242;1;123;

Нужно найти дубли пройдясь по всему файлу, после 5-го и до 6-го разделителя, условно говоря определенный кусок (выделил жирным шрифтом дубли).
Собственно код ниже, выводит везде "Совпадений нет". Подскажите, в чем моя ошибка?

PHP:
скопировать код в буфер обмена
  1. $fh = fopen('data.csv', 'r');
  2.  
  3. while($row = fgetcsv($fh, 0, ';')){
  4.  
  5.    for($i=0;$i<count($row);$i++){
  6.       if(substr($row[5], 0) == substr($row[$i], 0)){
  7.          echo ' | Найдено совпадение';
  8.    }else
  9.          echo ' | Совпадений нет ';break;
  10. }
 
 Top
Prizma
Отправлено: 25 Февраля, 2016 - 09:41:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




EpcMaster пишет:
Нужно найти дубли пройдясь по всему файлу, после 5-го и до 6-го разделителя, условно говоря определенный кусок (выделил жирным шрифтом дубли).
Собственно код ниже, выводит везде "Совпадений нет". Подскажите, в чем моя ошибка?

А не проще прогнать весь файл через preg_match (10 Мбайт меньше чем за секунду прогонит) например вот так:
PHP:
скопировать код в буфер обмена
  1. $f = file_get_contents('base.csv');
  2. $ar = [];
  3. $pr = false;
  4. if(preg_match("#([^;])*;([^;])*;([^;])*;([^;])*;([^;])*;([^;])*;([^;])*;([^;])*;#", $f, $re)) {
  5.         for($i = 0; $i < count($re[0]); $i++) {
  6.                 $date = $re[1][$i];
  7.                 $time = $re[2][$i];
  8.                 $name = $re[3][$i];
  9.                 $fam = $re[4][$i];
  10.                 $lang = $re[5][$i];
  11.                 $ip = $re[6][$i];
  12.                 $par1 = $re[8][$i];
  13.                 $par2 = $re[9][$i];
  14.                 if(isset($ar[$ip])) {
  15.                         $ar[$ip]++;
  16.                         $pr = true;
  17.                         echo '<br>Найдено совпадение: '.$ip;
  18.                 }else{
  19.                         $ar[$ip]=1;
  20.                 }
  21.         }
  22.         if(!$pr) {
  23.                 echo 'Совпадений не найдено';
  24.         }
  25. }else{
  26.         throw new \LogicException('preg_match_all error');
  27. }

(Отредактировано автором: 25 Февраля, 2016 - 09:46:29)

 
My status
 Top
EpcMaster
Отправлено: 25 Февраля, 2016 - 11:03:46
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2016  


Помог: 0 раз(а)




Но код не рабочий. Выводит, что нет совпадений.

Prizma пишет:
EpcMaster пишет:
Нужно найти дубли пройдясь по всему файлу, после 5-го и до 6-го разделителя, условно говоря определенный кусок (выделил жирным шрифтом дубли).
Собственно код ниже, выводит везде "Совпадений нет". Подскажите, в чем моя ошибка?

А не проще прогнать весь файл через preg_match (10 Мбайт меньше чем за секунду прогонит) например вот так:
PHP:
скопировать код в буфер обмена
  1. $f = file_get_contents('base.csv');
  2. $ar = [];
  3. $pr = false;
  4. if(preg_match("#([^;])*;([^;])*;([^;])*;([^;])*;([^;])*;([^;])*;([^;])*;([^;])*;#", $f, $re)) {
  5.         for($i = 0; $i < count($re[0]); $i++) {
  6.                 $date = $re[1][$i];
  7.                 $time = $re[2][$i];
  8.                 $name = $re[3][$i];
  9.                 $fam = $re[4][$i];
  10.                 $lang = $re[5][$i];
  11.                 $ip = $re[6][$i];
  12.                 $par1 = $re[8][$i];
  13.                 $par2 = $re[9][$i];
  14.                 if(isset($ar[$ip])) {
  15.                         $ar[$ip]++;
  16.                         $pr = true;
  17.                         echo '<br>Найдено совпадение: '.$ip;
  18.                 }else{
  19.                         $ar[$ip]=1;
  20.                 }
  21.         }
  22.         if(!$pr) {
  23.                 echo 'Совпадений не найдено';
  24.         }
  25. }else{
  26.         throw new \LogicException('preg_match_all error');
  27. }

(Отредактировано автором: 25 Февраля, 2016 - 11:04:59)

 
 Top
Prizma
Отправлено: 25 Февраля, 2016 - 11:12:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




EpcMaster пишет:
Но код не рабочий. Выводит, что нет совпадений.

я код не проверял, сори там было пара серьезных ошибок)) вот этот проверил:
PHP:
скопировать код в буфер обмена
  1. $f = file_get_contents('base.csv');
  2. $ar = [];
  3. $pr = false;
  4. if(preg_match_all("#([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);#", $f, $re)) {
  5.     if(count($re[0]) > 0) {
  6.         for ($i = 0; $i < count($re[0]); $i++) {
  7.             $date = $re[1][$i];
  8.             $time = $re[2][$i];
  9.             $name = $re[3][$i];
  10.             $fam = $re[4][$i];
  11.             $lang = $re[5][$i];
  12.             $ip = $re[6][$i];
  13.             $par1 = $re[8][$i];
  14.             $par2 = $re[9][$i];
  15.             if (isset($ar[$ip])) {
  16.                 $ar[$ip]++;
  17.                 $pr = true;
  18.                 echo '<br>Найдено совпадение: ' . $ip;
  19.             } else {
  20.                 $ar[$ip] = 1;
  21.             }
  22.         }
  23.         if(!$pr) {
  24.             echo 'Совпадений не найдено';
  25.         }
  26.     }else{
  27.         echo 'Файл пустой или ошибка в регулярном выражении';
  28.     }
  29. }else{
  30.     throw new \LogicException('preg_match_all error');
  31. }

(Отредактировано автором: 25 Февраля, 2016 - 11:12:45)

 
My status
 Top
EpcMaster
Отправлено: 25 Февраля, 2016 - 11:17:01
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2016  


Помог: 0 раз(а)




Потрясающе! Работает. Большое спасибо за помощь)))

Prizma пишет:

я код не проверял, сори там было пара серьезных ошибок)) вот этот проверил:
PHP:
скопировать код в буфер обмена
  1. $f = file_get_contents('base.csv');
  2. $ar = [];
  3. $pr = false;
  4. if(preg_match_all("#([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);#", $f, $re)) {
  5.     if(count($re[0]) > 0) {
  6.         for ($i = 0; $i < count($re[0]); $i++) {
  7.             $date = $re[1][$i];
  8.             $time = $re[2][$i];
  9.             $name = $re[3][$i];
  10.             $fam = $re[4][$i];
  11.             $lang = $re[5][$i];
  12.             $ip = $re[6][$i];
  13.             $par1 = $re[8][$i];
  14.             $par2 = $re[9][$i];
  15.             if (isset($ar[$ip])) {
  16.                 $ar[$ip]++;
  17.                 $pr = true;
  18.                 echo '<br>Найдено совпадение: ' . $ip;
  19.             } else {
  20.                 $ar[$ip] = 1;
  21.             }
  22.         }
  23.         if(!$pr) {
  24.             echo 'Совпадений не найдено';
  25.         }
  26.     }else{
  27.         echo 'Файл пустой или ошибка в регулярном выражении';
  28.     }
  29. }else{
  30.     throw new \LogicException('preg_match_all error');
  31. }
 
 Top
Prizma
Отправлено: 25 Февраля, 2016 - 11:22:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




На здоровье Подмигивание
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB