Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 50

Замена вещественных чисел в текстовых файлах

25.03.2019, 20:08. Показов 1237. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер всем форумчанам.
Стоит у меня такая задача: удалить из текстовых файлов все вещественные числа в промежутке от 0.001 до 1.001.
Пытаюсь считывать в строку данные из файла с помощью file_get_contents. Уже в этой строке пытаюсь заменять числа из этого промежутка на " " и эту строку записываю обратно в файл.
Регулярное выражение брала из похожей темы на форуме, но оно не работает. Вернее работает, если вместо $data будет записана строка.
PHP
1
 $result = preg_replace('/^(?:0\.(?:\d{1,2})?[1-9]|0\.(?:\d[1-9]|[1-9]\d)0|1(?:\.0{2}[01])?)$/', ' ', '0.05');
Прикладываю свой код
PHP
1
2
3
4
5
6
7
8
9
10
11
$dir = ($_POST['dir']);
 
        foreach(glob("$dir/*.txt") as $filename)
        {
            echo $filename."</br>";
            $data = file_get_contents($filename);
            $data = str_replace('/^(?:0\.(?:\d{1,2})?[1-9]|0\.(?:\d[1-9]|[1-9]\d)0|1(?:\.0{2}[01])?)$/', ' ', $data);
            $handle = fopen($filename, "w+");
            fwrite($handle, $data);
            fclose($handle);
        }
Очень нужна помощь. Голову сломала уже и не понимаю что не так.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2019, 20:08
Ответы с готовыми решениями:

Поиск и замена слов в текстовых файлах
Приветствую! Помогите пожалуйста. Необходим батник. Входные данные: Есть папка History с файлами .txt кодировка UTF-8 язык ENG ...

Поиск и замена строки в нескольких текстовых файлах
Есть оснавная папка TEST в ней много других папок (от 000 до 999) Каждая папка содержит - 2 текстовых файла. Надо организовать...

Замена определённых строк заданной строкой в текстовых файлах
Добрый день! Помогите пожалуйста. Необходимо в файле Папка\папка1\1.txt, заменить первую строку на другую, заданная мной И в файле...

8
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
25.03.2019, 20:11
Цитата Сообщение от Lizka_Love Посмотреть сообщение
str_replace
Lizka_Love, мне кажется, в строке 7 preg_replace() должен быть.
0
25.03.2019, 20:11

Не по теме:

УзнаЮ свою регулярку :)

0
25.03.2019, 20:12

Не по теме:


VNIIAEN, точно. То-то она мне знакомой показалась)))

0
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 50
25.03.2019, 22:04  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
не кажется, в строке 7 preg_replace() должен быть.
Всё равно ничего не удаляется в файле.

Цитата Сообщение от VNIIAEN Посмотреть сообщение
УзнаЮ свою регулярку
Да, ваше выражение . Может вы сможете подсказать что не так?

Добавлено через 4 минуты
К слову, в файле находится:
Hello
1.5
0.001
1
0.003
400.6
5.3
world!
Т.е. 0.001, 1, 0.003 должны удалиться.
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
25.03.2019, 22:22
Lizka_Love, так подойдет?
PHP
1
2
3
4
5
6
$file = file('file.txt');
$res = array_filter($file, function($n){
    return $n != ($n >= 0.001 && $n <= 1.003);
});
 
file_put_contents('file1.txt', $res);
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
25.03.2019, 22:50
Цитата Сообщение от Lizka_Love Посмотреть сообщение
Может вы сможете подсказать что не так?
Дело в том, что регулярка проверяет позицию от начала числа и до его окончания. А у вас файл читается в одну сплошную строку, которая соответственно не попадает под соответствия с шаблоном. Читайте файл в массив, при чём с отбрасыванием символов перевода на новую строку, и тогда этот массив можно передавать в preg_replace(). Вот так будет работать, но при условии, что в POST передаётся корректный путь к текст.файлу:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
$dir = $_POST['dir'];
 
foreach (glob("$dir/*.txt") as $filename) {
    $data = file($filename, FILE_IGNORE_NEW_LINES);
    $patt = '~^(?:0\.(?:\d{1,2})?[1-9]|0\.(?:\d[1-9]|[1-9]\d)0|1(?:\.0{2}[01])?)$~';
    $data = array_filter(preg_replace($patt, '', $data));
    file_put_contents($filename, join(PHP_EOL, $data));
}
И кстати да, зачем тут регулярка, не понятно.
0
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 50
25.03.2019, 23:30  [ТС]
Спасибо вам огромное. Оба варианта работают прекрасно.

Цитата Сообщение от Пифагор Посмотреть сообщение
PHP
1
2
3
$res = array_filter($file, function($n){
  return $n != ($n >= 0.001 && $n <= 1.003);
});
Не додумалась бы, что так вообще можно.

Цитата Сообщение от VNIIAEN Посмотреть сообщение
И кстати да, зачем тут регулярка, не понятно.
Не знаю даже что вам ответить, но почему-то они мне так полюбились
1
2 / 2 / 1
Регистрация: 28.10.2018
Сообщений: 32
27.04.2019, 17:17
Цитата Сообщение от VNIIAEN Посмотреть сообщение
Вот так будет работать
Подскажите пожалуйста, как можно доработать это решение, если вещественные числа могут стоять не только построчно, но и посреди текста?
Т.е. содержимое файла может быть например таким "xxx0.001xxx0.054xxx0.845xxx".

Добавлено через 4 часа 23 минуты
UPD. Кажется, уже сам разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2019, 17:17
Помогаю со студенческими работами здесь

Массовая Замена строки в текстовых файлах, на основе друг
Добрый день уважаемые форумчане! Большая просьба помочь в решении вопроса через батник. Исходные данные: Большой список файлов...

Замена части определённой строки во всех текстовых файлах заданной директории
Доброго день. Необходима помощь в написании bat, который бы заменил во всех файлаx (.txt) в директории: Заменить: &lt;td...

Замена заданной текстовой строки на указанную текстовую строку в текстовых файлах заданного каталога
Замена заданной текстовой строки на указанную текстовую строку в текстовых файлах заданного каталога. Объясните как он должен находить...

Вычисление суммы чисел в текстовых файлах
Я начал изучать Python 3 3 дня назад. Нужно решить такую ​​задачу: Есть файл input.txt в котором числа, например 14, 19, 110. Нужно найти...

Создание текстовых файлов с невозрастающей последовательностью целых и вещественных чисел
Уже третий день взрываю голову, пытаясь создать процедуру создания текстовых файлов с невозрастающей последовательностью целых и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru