25.11.2013 18:27
Tushkanchik
 
Есть файлик содерживое которого например
Иван 892811111
Петр 891855555

как можно оставить в нем только цифры ? Для смс рассылки)
Возможно както grep использовать, в ворде похожего не нашел.. Может у кого будет светлая мысль...
25.11.2013 19:37
KirillHome
 
Совсем "в лоб" - заменить пробел на точку с запятой, открыть Excel-ем как csv, лишнее - удалить.
Чуть сложнее - через bat-ник.

К примеру:
Код:
FOR /F "eol=; tokens=2,3* delims=, " %i in (мойфайл.txt) do @echo %i %j %k

    разбирает файл myfile.txt, пропуская все строки, которые
    начинаются с символа точки с запятой, и передает вторую и
    третью подстроки из каждой строки в тело цикла "for", причем
    подстроки разделяются запятыми и/или пробелами.
    В теле цикла переменная %i используется для второй
    подстроки, %j - для третьей, а %k получает все оставшиеся
    подстроки после третьей. Имена файлов, содержащие пробелы,
    необходимо заключать в двойные кавычки. Чтобы использовать
    двойные кавычки, необходимо использовать параметр usebackq,
    иначе двойные кавычки будут восприняты как определение
    строки-литерала для разбора.

    Переменная %i явно объявлена в инструкции "for", а переменные
    %j и %k объявляются неявно с помощью ключа tokens=.
    Ключ tokens= позволяет извлечь из одной строки файла до
    26 подстрок, при условии, что это не приведет к попытке
    объявить переменную после буквы "z" или "Z". Следует помнить,
    что имена переменных FOR являются однобуквенными,
    с учетом регистра, глобальными, поэтому одновременно
    не может быть активно более 52 переменных.
Т.е. в данном случае будет

Код:
echo Start > flleout.txt
FOR /F "eol=; tokens=2 delims=, " %i in (мойфайл.txt) do @echo >>%i
25.11.2013 20:42
KirillHome
 
Конечно, ошибся...
Имелось в виду вот так:
Код:
if exist flleout.txt del flleout.txt
FOR /F "eol=; tokens=2 delims=, " %i in (filein.txt) do @echo %i>>flleout.txt
25.11.2013 20:44
twix
 
SQL код:
<?php
$source 
fopen($argv[1], 'r');
$output '';
while ((
$line fgets($source)) !== false) {
    
$output .= preg_replace('/[^0-9.]+/'''$line) . "\r\n";
}
fclose($source);
file_put_contents($argv[1] . '_'$output);
?>
Вызывается так:
php [scriptfile].php [filename]

Вывод будет в [filename]_
25.11.2013 22:02
OlegON
 
Та ну... Мощь Linux, раз уж про grep заговорил...
test.txt - файлик, где второй колонкой через пробел идет телефон (как в варианте KirillHome)
Код:
cut -d' ' -f2 test.txt
если втупую "выкинуть все, кроме цифр" (вариант twix), то
Код:
sed -e 's/[^0-9]//g' test.txt
25.11.2013 23:04
Tushkanchik
 
Во, вариант с sed самый просто оказался )))
25.11.2013 23:16
OlegON
 
Ты просто неточно задачу описал... В наше время гигагерцев и гигабайт, народ забывает про оптимизацию решения. Regexp - не самое легкое. Если есть формат текста, то лучше cut.. На миллионах строк очень заметно будет.
25.11.2013 23:31
twix
 
Цитата:
OlegON Ты просто неточно задачу описал... В наше время гигагерцев и гигабайт, народ забывает про оптимизацию решения. Regexp - не самое легкое. Если есть формат текста, то лучше cut.. На миллионах строк очень заметно будет.
В задаче действительно не был указан формат входных данных. А так как нужны были только цифры, то вариант с примитивным отбраковыванием всего "нециферного" - самое простое решение. К тому же нет смысла заниматься оптимизацией алгоритма, который будет применён один раз. Лучше подождать лишних 30 секунд (минут), чем тратить часы на достижение быстрого выполнения скрипта.
25.11.2013 23:54
KirillHome
 
"Поумствую" :)
Отбрасывание всего "нецифирного" замечательно, если не будет имён типа Иван1, Петр27 и т.д.
Если формат действительно таков - ИмяНомер, то, на мой взгляд, правильнее будет взять последние последние 11 цифр (возможно, 12, если номер записан не как 8...., а как +7.....) - номер могут записать и с пробелами, с дефисами, скобками и т.д.
26.11.2013 09:05
Tushkanchik
 
Для моей задачи очень помогло. Нужно было из файла убрать все ФИО оставив только номера телефонов для смс рассылки.
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 21 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.
Часовой пояс GMT +3, время: 10:36.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.