БлогNot. Sort & Unique Strings сервис

Sort & Unique Strings сервис

При работе с большими списками строк, например, адресами E-mail или паролями для какой-то базы данных, словарями, логами и т.д., часто требуется автоматическая обработка этих списков:

  • исключение лишних пробелов между словами и в начале/конце строк;
  • удаление из списка пустых строк;
  • алфавитная сортировка строк;
  • удаление повторяющихся строк из данных.

Сортировку можно сделать и в офисных программах, а вот остальные задачи для списка из 50 или даже 5 тысяч строк никто "вручную" решать не станет, гораздо проще и удобнее написать для этой цели небольшой сервис на PHP.

Для удаления лишних пробелов, и, возможно, пустых (состоящих только из разделителей) строк достаточно одного прохода по строковому массиву, этот "ручной" проход будет работать быстрее, чем unset для разыменования отдельных элементов массива, применение фильтрующей элементы функции пользователя в array_filter или же вызов функции array_diff.

Данную работу выполняет функция array_delete_empty_items:

function array_delete_empty_items ($array,$delspaces,$delvoidstr) { 
 //Удалить лишние пробелы ($delspaces) и/или пустые строки ($delvoidstr) из массива строк $array
 $result = array();
 foreach ($array as $key => $value) {
  if ($delspaces) $value = preg_replace("/  +/"," ",trim($value));
  if ($delvoidstr and ($value=='' or preg_match("/^\s+$/",$value))) continue;
  $result[] = $value;
 }
 return $result;
}

Вся остальная реализация выполняется стандартными функциями PHP, в итоге получается вот что:

if (!empty($in)) { //Параметр $in - входной текст, полученный через форму
 $out=$in;
 $a = explode ("\n", $out);
 if ($delspaces or $delvoidstr) $a = array_delete_empty_items ($a,$delspaces,$delvoidstr);
 if ($uniquestr) $a=array_unique ($a);
 if ($sortstr) sort ($a,SORT_LOCALE_STRING); 
 $out = implode ("\n", $a); //$out - результат обработки
}
else $out= 'Нет входных данных для обработки';

Надо предполагать, что порядок выполнения операций тоже не безразличен - например, изначально различные строки могут стать одинаковыми после удаления лишних пробелов. Так как загрузка файла всегда потенциально опасней, чем текст из MEMO-поля, я не стал её реализовывать в онлайн-версии сервиса. В принципе, используя типовые приёмы для работы с файлами, это легко сделать.

Скрипт требует PHP 5.0.2 или выше. Онлайн-сервис может изменяться и несколько отличаться от описания.

 Ссылка на скрипт в работе и исходники - здесь

12.04.2012, 21:35 [9203 просмотра]


теги: список программирование textprocessing php сервис

К этой статье пока нет комментариев, Ваш будет первым