Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 36

Замена пробелов на знак ;

16.09.2015, 10:47. Показов 3254. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача такая, есть текстовый файл в котором инфа хранится в след. формате:

45024015

Юсупов Содикджон Джумаевич

89243418885

89097083061

Нужно написать скрипт, который бы переводил все данные в след. вид:

45024015; Юсупов; Содикджон Джумаевич; 89243418885; 89097083061;

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


В идеале, будет лучше, если текст берется из файла.csv и в уже обработанном виде пишется в файл analys.csv.

Пока идей не много:

PHP
1
2
3
4
5
6
7
<php
 
echo "Обработка текста";
$string=preg_replace("/XX+/","Х",$string);
// За место XX - поставить пробел.
 
?>
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.09.2015, 10:47
Ответы с готовыми решениями:

Замена пробелов на подчеркивание _
есть исходный текст: APPLE IPHONE 5 WHITE Надо получить: APPLE__IPHONE_5_WHITE

Замена начальных пробелов подчерками
Есть текстовый файл. Надо заменить пробелы в начале каждой строки подчерками. Использую утилиту sed.exe. Не мог придумать ничего лучшего,...

Замена пробелов в начале строки
Здравствуйте. Необходимо заменить четыре пробела на табуляцию, что находятся перед строчкой кода, а если есть четыре пробела в самом...

8
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
16.09.2015, 11:57
Dustinsk82la, правильно ли я понимаю, что каждый новый блок информации начинается с восьмизначного числа (в вашем примере - это "45024015")?
0
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 36
16.09.2015, 12:04  [ТС]
Да, именно так. Для этих целей лучше использовать регулярные выражения, но они только в процессе изучения.
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
16.09.2015, 12:30
Лучший ответ Сообщение было отмечено Dustinsk82la как решение

Решение

Не по теме:

Цитата Сообщение от Dustinsk82la Посмотреть сообщение
Для этих целей лучше использовать регулярные выражения
Ну, раз вы советуете, то как же я могу поступить иначе? :)


Пока не начали отвечать мэтры регулярок, дам вам такой простенький вариант. Читаете файл в массив функцией file()
PHP
1
$arr = file('my_file.txt', FILE_SKIP_EMPTY_LINES);
и обрабатываем таким образом:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$newArr = [];
$i = 0;
foreach($arr as $line) {
    if(preg_match('/^\d{8}$/', $line)) {
        $newArr[$i++] = '';
    }
    if(preg_match('/^[а-яё\s]+$/iu', $line)) {
        $line = preg_replace('/\s/', ';', $line, 1);
    }
    $newArr[$i-1] .= $line.';';
    
}
print_r($newArr);
Получаем примерно такой результат

Добавлено через 4 минуты
P.S. Ах, да... Запись в файл:
PHP
1
file_put_contents('analys.csv', implode(PHP_EOL, $newArr));
2
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 36
16.09.2015, 13:09  [ТС]
На выходе в файле analys.csv получаем следующее:
;;
51393939
;;;Никитин;Михаил Леонидович
;;;89090196254
;;;
52317348
;;;Фадеев;Владимир Николаевич
;;;89041616383
;;;
В чем может быть дело? Для справки страница с кодом php располагается на локальном localhost (CMS Joomla).
Где и как еще можно проверить работоспособность данного кода?
P.S в php я совсем новичок.
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
16.09.2015, 13:25
Цитата Сообщение от Dustinsk82la Посмотреть сообщение
В чем может быть дело?
А можно глянуть исходный файл?

Добавлено через 6 минут
Хотя не нужно. Я понял в чем дело.
PHP
1
$arr = file('reg_txt.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
2
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 36
16.09.2015, 14:08  [ТС]
Все отлично работает. Не могли бы вы пояснить работу двух строчек:
PHP
1
2
$newArr[$i++] = '';
$newArr[$i-1] .= $line.';';
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
16.09.2015, 15:15
Цитата Сообщение от Dustinsk82la Посмотреть сообщение
Не могли бы вы пояснить работу двух строчек
А что именно не понятно? Если $i++ , то читаем про Операторы инкремента и декремента. А вообще, если выполняется условие с проверкой на 8-мь цифр (preg_match('/^\d{8}$/', $line)), то создаем новый элемент массива, в который будем складывать данные (конкатенируя их) до тех пор, пока опять не наткнёмся на строку из 8-ми цифр. Можно было и по-другому сделать, но это первое что пришло в голову.
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
17.09.2015, 22:33
Можно именно зарегулярить еще. Например, таким образом
PHP
1
2
3
4
5
6
7
file_put_contents('./file.txt', 
    preg_replace(
        '~(?<=\\d{8};)\\s*?([а-яё]+)\\s*?((?:[а-яё]+\\s*?){2};\\s*?(?:\\d{11};)+)~iu',
        '$1;$2' . PHP_EOL,
        join(';', file('my_file.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES)) . ';'
    )
);
Добавлено через 2 минуты
А, ну и проверка еще http://ideone.com/NVW0jy
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2015, 22:33
Помогаю со студенческими работами здесь

Замена пробелов(%20) на _
скрипт загрузки файла &lt;?php $error = &quot;&quot;; $msg = &quot;&quot;; $fileElementName = 'fileToUpload'; $i = 0; $files_count =...

Как сделать что бы вместо пробелов между словами ставился знак '+' ?
Как сделать что бы вместо пробелов между словами в Edit`е ставился знак '+'?Пытался сам придумать какой-то способ, но в голову пока ничего...

замена пробелов
подскажите как пробелы заменить на &amp;nbsp? Ну вот например: &lt;?php $var = 'Форум программистов и сисадминов' echo $var; //вывести...

Замена пробелов на звёздочки
Подскажите пожалуйста, как сделать чтоб все пробелы в тексте заменились на звёздочки? Задача звучит так: Составте программу которая вводит...

Скрипт: Замена пробелов
Пишу простенький скрипт. Замена пробелов в именах файлов на символ подчёркивания.Вот сам скрипт: #!/bin/bash cd &quot;$1&quot; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru