Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> замена по тексту php, замена слов в цикле, предел возможности
vestmar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 118
Пользователь №: 39885
На форуме: 2 года, 11 месяцев, 8 дней
Карма:




Доброго времени суток, уважаемые знатоки.
стоит задача, в текстовом файле 250 000 строк размер 120 мб
в тексте встречаются химические вещества, они написаны в другом текстовом файле и в нём 10470 строк,
надо заменить на случайные другие всего 20,
весь процесс я примитивно вредставляю

foreach(большой файл as строку_текста) {

foreach(список хим веществ as строку_хим_вещества) {

preg_peplace (строка_хим_вещества, строка_текста, переменная)

}

запись массива[] строка_текста

}

вроде всё просто, но это же дико, 250 000 строк проверить 10470 раз ещё и через preg_replace (потому что обязательная регулярка для хим_вещества [^\w]веществл )

Подскажите как такое оформить?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3666
Пользователь №: 38635
На форуме: 3 года, 5 месяцев, 2 дня
Карма: 194




vestmar
Цитата
файле и в нём 10470 строк
не так уж и много, можно запихать в массив. Каждый элемент массива - одно химическое вещество.
далее, когда перебираешь строки своего 120мб файла, выдергиваешь рандомно элемент массива, и пишешь в строку.

up:
Хотя, кажется, я не понял задачу.
ну, в общем смысл в том, чтобы сгенерировать масив (можно даже ассоциативный) и работать с ним без перебора

Это сообщение отредактировал AllesKlar - 13.10.2014 - 23:15


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2311
Пользователь №: 26852
На форуме: 6 лет, 2 месяца, 13 дней
Карма: 126




Не совсем ясна задача.
Цитата
в текстовом файле 250 000 строк размер 120 мб
в тексте встречаются химические вещества, они написаны в другом текстовом файле и в нём 10470 строк,
надо заменить на случайные другие всего 20,
Разбираем:

file_1.txt содержит 250 000 строк текста, в котором встречаются химические вещества, размер файла 120Мб
file_2.txt содержит 10 470 строк названий химических веществ, размер файла ??

надо заменить на случайные другие всего 20 - что заменить? где заменить?

В файле_1 нужно рандомно из всего текста, заменить всего 20ть химических слов, взяв слова из 2го файла... или что?...

Пример файла_1 и файла_2, что бы было понятно че куда...
p.s. ну и свои наброски кода
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
vestmar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 118
Пользователь №: 39885
На форуме: 2 года, 11 месяцев, 8 дней
Карма:




Извините за такое непонятное письмо!

В большом файле текстовом файле встречаются хим вещества,
у меня есть полный список их, в отдельном файле 10470 химикатов (1),
и есть список на которые нужно заменить 20 всего (2),

Так вот из большого файла надо заменить всем хим вещества по списку (1) которые совпадут в тексте, на рандомные 20 (2),

Я составлю пример завтра, Спасибо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2311
Пользователь №: 26852
На форуме: 6 лет, 2 месяца, 13 дней
Карма: 126




Снова не совсем понятно...
Есть большой файл с текстом, текст содержит хим.вещества, которые нужно будет заменить, с этим все понятно.

Для чего нужен отдельный файл со всеми химикатами?, если нужно заменить всего 20ть из "третьего" списка/файла...

или там будет расшифровка?, типа Cu - Медь...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
vestmar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 118
Пользователь №: 39885
На форуме: 2 года, 11 месяцев, 8 дней
Карма:




список веществ которых нужно найти 10470 и заменить на случайные 20
представьте себе

найти (хим вещество1|хим вещество2|хим вещество3|хим вещество4|и так до 10470)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2311
Пользователь №: 26852
На форуме: 6 лет, 2 месяца, 13 дней
Карма: 126




Все, я в ауте... Жду примеры файлов (достаточно по 50 строк), а так же примеры:

имеем на входе файл 1 ( файл прикреплен ), в котором нужно будет произвести замены, файл БОЛЬШОЙ !!! и загонять его в массив - это не комильфо.

имеем на входе файл 2 ( файл прикреплен ), который содержит ( ... )
...

имеем на входе файл N ( файл прикреплен ), который содержит ( ... )

нужно на выходе получить это - и тоже пример...

потому как, до сих не понятно что нужно unsure.gif

либо в аську стукай, аська в профиле.

Это сообщение отредактировал walerus - 14.10.2014 - 20:29
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
vestmar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 118
Пользователь №: 39885
На форуме: 2 года, 11 месяцев, 8 дней
Карма:




walerus Спасибо Вам!) что уделили столько времени! Если не разберусь сам напишу в ICQ Вам)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3666
Пользователь №: 38635
На форуме: 3 года, 5 месяцев, 2 дня
Карма: 194




walerus
Да все понятно. Есть файл и два списка. если в файле встречается элемент списка #1 , то заменить его рандомным элементом списка #2

Как я уже выше и сказал.
Файлы с хим элементами читаем в массивы и работаем с ними.

$handle = @fopen("inputfile.txt", "r");
while ($buffer = fgets($handle, 4096))
{
$tmp_arr = explode(' ', $buffer); // Дописать коректную разбивку на слова. Все знаки препинания - отдельные слова, чтобы потом можно было собрать назад строку.
foreach($tmp_arr as &$word)
{
if(in_array($word, $array_10470))
{
$word = $array_20[rand(0, count($array_20) - 1)];
}
}


$str = implode(' ', $tmp_arr);
//далее пишем строку в выходной файл
}
fclose($handle);


Это как база. Дальше пороботать над оптимизацией.
Но, то что 120 метров текста не надо обрабатывать регуляркой - это однозначно.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3666
Пользователь №: 38635
На форуме: 3 года, 5 месяцев, 2 дня
Карма: 194




В качестве оптимизации, сделать список слов, не подлежащих проверки(знаки препинания, более одного пробела и т.д.)


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
vestmar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 118
Пользователь №: 39885
На форуме: 2 года, 11 месяцев, 8 дней
Карма:




СПАСИБО! AllesKlar так гораздо быстрее! смысл понял дальше я сам)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
vestmar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 118
Пользователь №: 39885
На форуме: 2 года, 11 месяцев, 8 дней
Карма:




Единственное что хотел бы узнать
вот к примеру строка- Вася пошёл в магазин, купить пива

как получить

Array
(
[0] => Вася
[1] => пошёл
[2] => в
[3] => магазин
[4] => ,
[5] => купить
[6] => пива
)

что бы в массив попала и запятая?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Bolik  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 357
Пользователь №: 35724
На форуме: 4 года, 6 месяцев, 9 дней
Карма: 5




explode (" ", str_replace (",", " ,",строка));
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
vestmar  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 118
Пользователь №: 39885
На форуме: 2 года, 11 месяцев, 8 дней
Карма:




а потом я соберу обратно в строку? )
в такую какой была
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3666
Пользователь №: 38635
На форуме: 3 года, 5 месяцев, 2 дня
Карма: 194




vestmar
Поэтому я и написал:
Цитата
// Дописать коректную разбивку на слова. Все знаки препинания - отдельные слова, чтобы потом можно было собрать назад строку.

Ну, это уже типичная задачка из методички. Думай, пробуй..

Главное, что ты понимаешь:
Цитата
а потом я соберу обратно в строку? )
в такую какой была


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса