Показать полную графическую версию : Нужен BAT файл
Добрый денб.
Есть файл формата TXT с кучей информации. Мне оттуда надо выбратьнекоторую информацию, скажем телефоны. Шаблон такой т. хххххх . И перебросить в новый файл в котором этот номер будет выглядить примерно так ";"." "."номер телефона". "какая-то цифра все время постоянна"
Как это сделать как можно проще? По идеи можно же и в БАТ файле с помощью комманд. Но я их уже давно не помню, а надо быстро.
Спасибо за внимание.
Prisoner
25-11-2003, 01:16
Подозреваю, что батниками тут не управишься - имхо нет у них механизма построчного считывания. Попробуйте другой язык или подождите когда на тему откликнется гуру :).
Domovoi
Мне кажется, что здесь ВАТником не обойтись. Надо скриптик на Перле написать :) ИМХО, ВАТники не умеют считываь инфу из файла. Вот переименовывать, копировать - пожалуйста. Дописывать - тоже. Как вариант, можно реализовать программу с нужными функциями на Паскале, Си, Бейсике и любом другом более-менее приличном языке.
shurikan
25-11-2003, 03:03
Domovoi
Да, уж. BAT для DOS-а не то, что bash под *nix-ом. Последний может.
Могу навалять програмулю на C, если не предпочтешь сделать сам. На всякий случай уточняю:
допустим встречается где-то в файле запись т. 555123 - ее надо преобразовать в ;. .555123.Ц, где Ц некая цифра. В процессе разбора одного файла Ц не меняется. Выходная инфа пишется в столбик. Имена входного и выходного файлов, а также Ц задаются как параметры программы в командной строке. Так?
Решение за тобой! :)
Текстовый файл очень разрозненный по сути БД но телефоны находятся где попало, не только в нужном поле, а надо вытащить все. BAT не смогу, уже пробовал, результат не впечатлил.
встречается надпись такая:
тел. 11-11-11
тел. 111111
тел.111111
тел.11-11-11
т. 111111
т. 11-11-11
т. 111111
т.111111
т.11-11-11
выглядят они по разному. И это все телефоны, желательно вытащить как можно больше, лучше так все.
И еще надо не забывать что информации кроме этой там много, так что надо как-то лишнюю обрезать.
выходная выглядит так:
"":"";"";"";"";"111111";"";""
вот в приципе и все.
Да забыл сказать файлик весит около 100 метров.
2 bgg0408,Prisoner вообще то батником можно из файла читать и все такое ... только не command.com который из DOS/Win 9x, а cmd.exe который в Win 2k/XP ... хотя конечно до юниксовых шелов ему далеко ...
to Guest
Пример, пожалуйста, в студию!!!:gigi:
А чем Перл плох? По-моему самое то.
Prisoner
26-11-2003, 02:01
Domovoi
В таком случае рекомендую язык высокого уровня... кстати фишку с "тел" и "т" можно победить простой заменой в тексте.
PS shurikan, вызвался вам помочь (меня радует его благотворительность), так попробуйте договориться с ним.
shurikan
26-11-2003, 03:28
Domovoi
Я готов, только все равно не понимаю формат вывода (слишком много кавычек). Нельзя ли тройку примеров, как в реале должен выглядеть вывод. Например:
есть такие подстроки -
... т.123178... ... тел. 189990 т. 675419...
А вот так д. выглядеть вывод:
(:123178)
(:189990)
(:675419).
Скобки к делу не относятся. Я имею ввиду, что внутри скобок, не затененные кавычками, видны все нужные символы. М.б. это д.б. так (:;;; 12 31 78)?
Напиши этот формат примерно, как показал. Будет понятнее. ОК? :)
Добавлено:
Да, это под какой системой?
Добавлено:
Еще одна мысль пришла в голову. Может там еще и факсы есть? Тогда укажи нужны ли они и как они сокращаются, если сокращаются. Может быть с телефонами комбинируются т./ф. тел./факс? :)
Prisoner
Простая замена не поможет так как это кусок с БД. Там иногда ни к чему встречаются буквы Т или написано Т, а телефона нет.
shurikan
Формат вывода.
Да пусть будет просто номера телефонов в столбик а txt файл, дальше сам сделаю, тем более что там и делать ничего практически не останеться.
вывод должен быть таким:
123454
564544
454235
675464
Все номера 6-сти значные.
PS хорошо бы еще в другой выходной файл запихнуть список мобильных телефонов. Нач-ся с: моб формат :89103333333 или 8-903-333-33-33
....
если важно (или интересно формат вывода:
(
"";"";"";"";"";"";"";"";"410570";""
"";"";"";"";"";"";"";"";"410676";""
"";"";"";"";"";"";"";"";"410737";""
"";"";"";"";"";"";"";"";"410742";""
"";"";"";"";"";"";"";"";"410743";""
)
Как выглядит текст (исходник)
тел. 44-96-42БРЯНСКАЯ обл., БРЯНСК, 22 СЪЕЗДА КПСС ул., д. ХХ, кв. ХХ, ком.БРЯНСКАЯ обл., БРЯНСК, 22 СЪЕЗДА КПСС ул., д. 27, кв. ХХ, ком.
БРЯНСКАЯ обл., БРЯНСК, ДУКИ ул., д. ХХ, кв. 12, ком.БРЯНСКАЯ обл., БРЯНСК, ДУКИ ул., д. ХХ, кв. 12, ком.
БРЯНСКАЯ обл., БРЯНСК, КРАСНОАРМЕЙСКАЯ ул., д. ХХ, кв. ХХ4, ком.БРЯНСКАЯ обл., БРЯНСК, КРАСНОАРМЕЙСКАЯ ул., д. ХХ, кв. ХХ, ком.
БРЯНСКАЯ обл., БРЯНСКБРЯНСКАЯ обл., БРЯНСК
БРЯНСКАЯ обл., БРЯНСК, АВИАЦИОННАЯ ул., д. , кв. 9, ком.БРЯНСКАЯ обл., БРЯНСК, АВИАЦИОННАЯ ул., д. , кв. 9, ком.
БРЯНСКАЯ обл., БЕЛЫЕ БЕРЕГА, ЛЕНИНА ул., д. ЯЯкв. Я, ком.БРЯНСКАЯ обл., БЕЛЫЕ БЕРЕГА, ЛЕНИНА ул., д. ЯЯв. Я ком.
БРЯНСКАЯ обл., БРЯНСК, АБАШЕВА ул., д. 6, кв. ЯЯ, ком.БРЯНСКАЯ обл., БРЯНСК, АБАШЕВА ул., д. 6, кв. ЯЯ, ком.
БРЯНСКАЯ обл., КЛИНЦЫ, МИРА ул., д. ЯЯ, кв. ЯЯ, ком.БРЯНСКАЯ обл., КЛИНЦЫ, МИРА ул., д. ЯЯ, кв. ЯЯ, ком.
з/п 3300, жена Ирина Мих. - 41 год - кладовщик, падчер. Катя - 19 лет студ.г. Брянск, ул. Домбасская, ЯЯ - 72г. Брянск, ул. Горбатова, 7 - ЯЯ, т. 753008
БРЯНСКАЯ обл., НОВОЗЫБКОВ, ГВАРДЕЙСКАЯ ул., д. ЯЯ, ком.БРЯНСКАЯ обл., НОВОЗЫБКОВ, ГВАРДЕЙСКАЯ ул., д. ЯЯ, ком.
БРЯНСКАЯ обл., БРЯНСК, БЕЖИЦКАЯ ул., д. ЯЯ, ком.БРЯНСКАЯ обл., БРЯНСК, БЕЖИЦКАЯ ул., д. ЯЯ, ком.
БРЯНСКАЯ обл., ФОКИНО, ПРИВОКЗАЛЬНАЯ ул., д. 5, кв. 5, ком.БРЯНСКАЯ обл., ФОКИНО, ПРИВОКЗАЛЬНАЯ ул., д. 5, кв. 5, ком.
з/п-4000; жена:Галина Александровна-53г.; сын:Саша-24г.г.Клинцы,ул.Калинина,ЯЯ; (Кв-ра 64кв.м.- сов.дол.приват.) т.(236) 57498Гараж,ГСК-2.
Добавлено:
Факсы встречаются но они не нужны
Выводной файл txt виндовский формат текста.
У меня стоит 2000 проф. SP 3
shurikan
27-11-2003, 00:44
Domovoi
Понял, сделаем.
:)
Добавлено:
Да, тебе исходник или exe-шник? Если исходник, будет на BC++ Builder 6.
Добавлено:
Еще! Черкани мне на e-mail пару строк, чтобы я мог ответить со вложением. ОК?:)
shurikan
Как успехи?
Ps на мыло отправил письмецо...
shurikan
30-11-2003, 04:39
Domovoi
Лови, отправил!
:)
Добавлено:
Программа отыскивает 6-значные местные номера и 11-значные номера мобильников. Может и междугородные нужны? Надо было бы раньше спросить... Если нужно - поправим. :)
Prisoner
30-11-2003, 10:03
Будет просьба дальнейший диалог вроде Лови, отправил! вести по почте. Здесь - все что касается первоначальной проблемы. Заранее спасибо.
All
Вопрос вот в чем:
На клиентских машинах один из модулей системы постоянно
обновляет базу (и еще кой какую фигню) с удаленного сервера
при этом обновления идут в следующем порядке
Драйв:\Каталог\Обновление.001
Драйв:\Каталог\Обновление.002
Драйв:\Каталог\Обновление.003
................
Драйв:\Каталог\Обновление.999
самое "новое" обновление ессно с большим номером в расширении
проблема вот в чем - каждое обновление
является полнофункциональным,
т.е. предыдущие куски не нужны...
но софт предыдущие сам не удаляет и со временем
накапливается достаточно большое кол-во этого мусора
и "ручками" мне его удалять достало
Так вот возможно ли написание батника
без использования доп софта который бы
находил файл с самым большим номером,
а остальные удалял ?
Мне нужны только стандарные команды
comman.com`a (cmd.exe) -
очень хотелось бы обойтись без всяких расширителей
Вроде особо сложного то ничего - бат справиться должен,
у меня загвоздка в вычислении самого большого номера...
Prisoner
24-04-2004, 04:03
Упрощенный вариант:
@echo off
dir sort /B /O-N > files.lst
FOR /F "skip=1" %%i IN (files.lst) DO @del sort\%%i
Здесь код командника лежит в файле, а каталог с которым проводится работа называется sort и лежит он в том же каталоге, что и сам командник. Пойдет?
Prisoner
Тут вот еще что - в каталоге
кроме обновлений лежат и оч.нужные файлики
(длл-и, ехе-шки и т.п.)
их нужно отсечь из списка
и работать только с
Драйв:\Каталог\Обновление.001
Драйв:\Каталог\Обновление.002
Драйв:\Каталог\Обновление.003
................
Драйв:\Каталог\Обновление.999
(имена файлов обновлений всегда одинаковы -
отличия только в расширении, а оно всегда числовое)
Все вопрос отпал -
@echo off
dir sort\обновление.* /B /O-N > files.lst
FOR /F "skip=1" %%i IN (files.lst) DO @del sort\%%i
добавил маску и все ОК
Prisoner еще раз Thnx :beer:
Исправлено: Lamo, 20:55 24-04-2004
добавил маску и все ОК
Млин было ОК :(
пока не добрался до машин с win9х
там FOR не понимает расширенный набор,
т.е. внутрь файла/локации он не заходит
и отругивается... :(
есть еще какие-нибудь соображения
как листинг заставить перебирать ?
Prisoner
28-04-2004, 04:43
т.е. внутрь файла/локации он не заходит
и отругивается...
Это как? Имеется ввиду не перебираетвсе строки из файла-листинга?
Я право уже успел забыть (угу, легко забыть когда не знаешь :)) все о эмуляции ДОС под 9х, но ваш вопрос "решил" путем чтения помощи (for /?). Может поможет?
Prisoner
"решил" путем чтения помощи (for /?). Может поможет?
Вот все что выдает Help по этому делу
Запуск указанной команды для каждого из файлов в наборе.
FOR %переменная IN (набор) DO команда [параметры]
*%переменная *Подставляемый параметр.
*(набор) * * *Набор, включающий один или более файлов. *
* * * * * * * Допускается использование подстановочных знаков.
*команда * * *Команда, выполняемая для каждого из файлов в наборе.
*параметры * *Параметры и ключи, необходимые для выполнения команды.
При использовании команды FOR в пакетном файле вместо записи %переменная
следует использовать запись %%переменная.
Извини, но я просто не соображу как это может помочь, -
внуть файлов он заходить ИМХО не умеет,
обороты типа
@FOR /F "skip=1" %%i IN ('dir sort\обновления.* /B /O-N') DO @del sort\%%i
он не понимает
а
как "присвоить" листинг какой-нидь переменной,
я сообразить немогу...
Исправлено: Lamo, 6:25 28-04-2004
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.