Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Алексей96
0 / 0 / 0
Регистрация: 19.04.2014
Сообщений: 30
1

Разбиение текстового файла, имя которого задано первым параметром КФ

19.04.2015, 21:42. Просмотров 1827. Ответов 4
Метки нет (Все метки)

Разбиение текстового файла, имя которого задано первым параметром КФ, на три файла с именами 1.txt, 2.txt и 3.txt. Количество строк в каждом из этих файлов задано вторым, третьим и четвертым параметрами КФ. Проверить наличие указанного исходного файла и вывести сообщение о его отсутствии, проверить наличие остальных параметров и их значения на допустимость
Всё это сделать в bat файле
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2015, 21:42
Ответы с готовыми решениями:

Подсчет количества строк в текстовом файле, имя которого задано первым параметром КФ. Проверить наличие указа
Подсчет количества строк в текстовом файле, имя которого задано первым параметром КФ. Проверить...

Поиск во временном каталоге системы файла, имя которого передается параметром
Поиск во временном каталоге системы файла, имя которого передается параметром, если файл найден, то...

Вывод текста командой ECHO в файл, имя которого задано маской
Нужна помощь с командой echo: Имеется файл, например 1_file_2.txt, когда командой dir ищу по...

Имя текстового файла задано в строке запуска
Помогите пожалуйста:) Имя текстового файла задано в строке запуска. Вывести все целые числа и...

Ввести текст из файла, имя которого задано в командной строке, и вывести на экран
Ввести текст из файла, имя которого задано в командной строке и вывести на экран. Текст занимает...

4
ComSpec
3415 / 1959 / 628
Регистрация: 26.02.2014
Сообщений: 1,457
21.04.2015, 09:50 2
Ну вот "сотворил это чудо". Как-то "не по-детски" получилось. Особенно "по-взрослому" выглядят 26-ая и 39-ая строки. С помощью пакетного файла с этим кодом можно "разнести" содержимое любого текстового файла, заданного первым параметром командной строки (полное имя), по файлам, в которых число строк будет определятся остальными параметрами в любом количестве. Код можно переработать и для контекстного меню "Отправить", заменив ввод числовых параметров в командной строке на ввод значения переменной при работе пакетного файла.



Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@echo off
setlocal
 
if not exist %1 (
 echo The source file is not found or parameters are missing.
 endlocal& exit/b 1
) else cd/d "%~dp1"
 
for %%i in (%*) do (
 if %%i neq %1 (
  if "%%~i" neq "0" (
   set/a k+=1
   set x=%%~i
   cmd/v/c echo.!x!| >nul findstr/rv "^[1-9][0-9]*$"&& (
   set flag=false& echo The parameter (%%i^) is incorrect.
   )
  )
 )
)
if defined flag (endlocal& exit/b 2)
if not defined k (echo Not enough parameters.& endlocal& exit/b 3)
 
for /f %%i in ('^<%1 find/c /v ""') do (
 for /l %%j in (1 1 %k%) do (
  set/a l=m+1
  call set/a m+=%%~%%j+1
  <%1>%%j.txt call call:sub %%i %%l%% %%m%%
 )
)
 
endlocal
exit/b 0
 
 
:sub
 setlocal
 for /l %%j in (1 1 %1) do (
  set/a n+=1& set y=& set/p y=
  cmd/v/c "if !n! geq %2 if !n! leq %3 if !y! neq ^^!y^^! (echo.!y!) else (echo.)"
 )
 endlocal
 goto:eof


P.S. Когда писал, думал, что может произойти конфликт внешних и внутренних аргументов. Не произошёл... Если не будет критических замечаний, можно и в "Полезные скрипты" поместить, а если замечания будут, то доделаю или переделаю. Во время тестирования код работал на ура, но, может, что-то я и не учёл.
4
Алексей96
0 / 0 / 0
Регистрация: 19.04.2014
Сообщений: 30
21.04.2015, 12:07  [ТС] 3
При вводе второго параметра не выводит больше одной строчки в 1.txt вне зависимости от параметра.
Во 2.txt и 3.txt количество строк не всегда соответствует вводимому параметру.
0
ComSpec
3415 / 1959 / 628
Регистрация: 26.02.2014
Сообщений: 1,457
21.04.2015, 12:45 4
Алексей96, спасибо за тестирование. Внёс изменения в "рискованную" 26-ую строку:



Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@echo off
setlocal
 
if not exist %1 (
 echo The source file is not found or parameters are missing.
 endlocal& exit/b 1
) else cd/d "%~dp1"
 
for %%i in (%*) do (
 if %%i neq %1 (
  if "%%~i" neq "0" (
   set/a k+=1
   set x=%%~i
   cmd/v/c echo.!x!| >nul findstr/rv "^[1-9][0-9]*$"&& (
   set flag=false& echo The parameter (%%i^) is incorrect.
   )
  )
 )
)
if defined flag (endlocal& exit/b 2)
if not defined k (echo Not enough parameters.& endlocal& exit/b 3)
 
for /f %%i in ('^<%1 find/c /v ""') do (
 for /l %%j in (1 1 %k%) do (
  set/a l=m+1
  for /f %%k in ('set/a %%j+1') do call set/a m+=%%~%%k
  <%1>%%j.txt call call:sub %%i %%l%% %%m%%
 )
)
 
endlocal
exit/b 0
 
 
:sub
 setlocal
 for /l %%j in (1 1 %1) do (
  set/a n+=1& set y=& set/p y=
  cmd/v/c "if !n! geq %2 if !n! leq %3 if !y! neq ^^!y^^! (echo.!y!) else (echo.)"
 )
 endlocal
 goto:eof


.
2
Алексей96
0 / 0 / 0
Регистрация: 19.04.2014
Сообщений: 30
21.04.2015, 22:34  [ТС] 5
спасибо, всё работает)
0
21.04.2015, 22:34
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2015, 22:34

Как обратиться к данным .xls файла, имя которого задано в ячейке как текст
есть два файла: a.xls и b.xls Имя файла &quot;a.xls&quot; присутствует в определенной ячейке файла b.xls...

Ввод с клавиатуры содержимого текстового файла, имя которого задается в командной строке, используя системные вызовы и в
ПОМОГИТЕ ПОЖАЛУЙСТА Ввод с клавиатуры содержимого текстового файла, имя которого задается в...

Ввод с клавиатуры содержимого текстового файла, имя которого задается в командной строке, используя системные вызовы
ПОМОГИТЕ, ПОЖАЛУЙСТА, ПОНЯТЬ. У МЕНЯ ЕСТЬ ЗАДАЧА &quot;Ввод с клавиатуры содержимого текстового файла,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.