|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Расположение текста в файле в 2 колонки |
|
CMD/BAT - Расположение текста в файле в 2 колонки
|
Пользователь Сообщения: 84 |
Доброго времени суток!
Текстовый файл содержащий большое количество справок. Справки расположены в одну колонку, представляют собой текстовый блок шириной в 44 символа и длиной в 17 строк. Между ними 1-2 пустые строки для разрезания. Эти справки будут печататься на рулонной бумаге на матричном банковском принтере. Для экономии бумаги и времени нужно чтобы все справки располагались в 2 колонки, допустим уже с 47 позиции символа. Т.е. на одном уровне должно располагаться справка 1-2, ниже 3-4 и т.д. Длина блока одинаковая, но лучше рассмотреть такой вариант когда длины разные и нужно дополнение нужного количества строк до длины самого длинного блока - тогда после расположения справок в 2 колонки между ними будет промежуток для разрезания. Определение длины са мого длинного блока в принципе если сильно сложно можно вводить как параметр и определять визуально вручную. Главное - текст расположить в 2 колонки. Попробуем? P.S. А может если ширина бумаги позволяет даже замахнуться на расположение в 3 колонки? Желательно бы регулировать ... Когда то я эту задачу решал копирование блока в ФАРе и вставкой, НО длина блоков может быть разная и потом не порежишь и нумерация не атк как нужно была: 2 колонка продолжала с того номера на каком заканчивалась 1 колонка ... |
|
Отправлено: 19:08, 26-08-2009 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Конкретнее: чем начинается справка, чем кончается. Особенно это необходимо, если справки разной длины. Фраза "длиной в 17 строк. Между ними 1-2 пустые строки" не очень годится для программирования - должно быть что-то жесткое. А, в принципе, задачка легко решается VBS-скриптом.
|
------- Отправлено: 00:24, 27-08-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Serg2010, батники плохо подходят для обработки произвольного текста, так как некоторые символы текста могут совпасть с метасимволами самого командного интерпретатора (например, "&|^")
|
Отправлено: 09:32, 27-08-2009 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата:
Цитата:
|
||
Последний раз редактировалось megaloman, 27-08-2009 в 10:28. Отправлено: 10:06, 27-08-2009 | #4 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Вот решение задачи, как Вы её поставили.
Предполагается что все справки одинаковы по числу строк Файл длиной 100000 строк у меня преобразовывался менее 2 сек. Скопируйте текст скрипта в блокнот, сохраните в файл с расширением VBS (например txt_stolb.VBS ) настройте свои пути к файлам и параметры документа. Запускайте в проводнике (или в FAR-е, коль Вы им пользуетесь) как исполнимый файл Проверено - работает. Осознаю, что скрипт Вас не устроит, но как поставлена задача, так она и сделана. Доработки, конечно, возможны. Принцип формирования файла тут заложен хороший. ' Скрипт из исходного текстового файла делает другой текстовый файл ' В котором исходный текст располагается заданным числом столбцов ' Блоками указанной длины (в строках) ' Нумерация блоков (в случае 3 столбцов) ' 1 2 3 ' 4 5 6 ' 7 8 9 ' и т д. ' Необходимо настроить: ------------------------ InText = "E:\Delete\Text.txt" OutText = "E:\Delete\TextOut.txt" WStrok = 67 ' Число символов в строке LStrok = 17 ' Число строк в блоке NCol = 3 ' Число столбцов в выходном файле WPole = 10 ' Число пробелов между столбцами ' ---------------------------------------------- ReDim OutStr(LStrok - 1, NCol - 1) Messa = "" Pusto = String(WStrok, " ") Probel = String(WPole, " ") Set FSO = CreateObject("Scripting.FileSystemObject") On Error Resume Next Set F1 = FSO.OpenTextFile(InText, 1, False) If Err.Number = 0 Then Messa = CStr(Time) + " Открыт файл " + InText + Chr(13) + Chr(10) ' Читаем исходный файл в массив iString = F1.ReadAll() F1.Close iString = Replace(iString, Chr(10), "") Mass = Split(iString, Chr(13)) iString = "" N = UBound(Mass) ' выравниваем строки по ширине For i = 0 To N Mass(i) = Mid(Mass(i) + Pusto, 1, WStrok) Next Set F1 = FSO.OpenTextFile(OutText, 2, True) ' Создаём выходной файл ' Цикл по началам блоков L = -1 For i = 0 To N Step LStrok If L < 0 Then ' Готовим чистый бланк из нескольких колонок For j = 0 To LStrok - 1 For k = 0 To NCol - 1 OutStr(j, k) = "" Next Next End If ii = i + LStrok - 1 If ii > N Then ii = N ' Заполняем бланк текстом L = L + 1 For j = i To ii OutStr(j - i, L) = Mass(j) Next If L = NCol - 1 Then L = -1 iString = "" For j = 0 To LStrok - 1 iString = iString + OutStr(j, 0) If NCol > 1 Then For k = 1 To NCol - 1 iString = iString + Probel + OutStr(j, k) Next End If iString = iString + Chr(13) + Chr(10) Next F1.WriteLine iString End If Next If L >= 0 Then iString = "" For j = 0 To LStrok - 1 iString = iString + OutStr(j, 0) If LCol > 1 Then For k = 1 To NCol - 1 iString = iString + Probel + OutStr(j, k) Next End If iString = iString + Chr(13) + Chr(10) Next F1.WriteLine iString End If ' Записываем результат в файл ' Set F1 = FSO.OpenTextFile(OutText, 2, True) ' For i = 0 To N ' F1.WriteLine Right("000000" + CStr(i) + " ", 7) + Mass(i) ' Next F1.Close Messa = Messa + CStr(Time) + " Записан файл " + OutText + Chr(13) + Chr(10) Messa = Messa + CStr(Time) + " Преобразование завершено" Else Messa = "Ошибка при открытии файла " + Chr(13) + Chr(10) + InText + Chr(13) + Chr(10) + Err.Description End If L = MsgBox(Messa, 0, "Преобразование файла") |
|
Отправлено: 19:39, 27-08-2009 | #5 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Serg2010, ESC-последовательности случайно не используются?
![]() |
Отправлено: 06:37, 28-08-2009 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Serg2010, Естественно, при применеиии по исходному тексту непечатных символов, управляющих работой принтера, результат работы моего скрипта при печати будет непредсказуемым, хотя, формально, он текст разобъет на колонки.
Но как поставлена задача ... В принципе, можно просмотреть исходный текст и уничтожить все непечатные символы, но в ESC последовательности может входить что угодно, поэтому этого делать нельзя. Но, судя по тому, что Вам хватало и редактора FAR, проблем не должно возникнуть. |
------- Отправлено: 18:31, 28-08-2009 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] есть ли способ быстрого поиска текста в файле ? | mitiya | Скриптовые языки администрирования Windows | 2 | 27-03-2010 23:33 | |
Разное - [решено] FoxPro 2.6 Замена фрагментов текста в txt-файле | Pashka | Программирование и базы данных | 7 | 18-01-2010 19:20 | |
CMD/BAT - [решено] Изменение текста в файле | tarasov.evgeny | Скриптовые языки администрирования Windows | 5 | 12-08-2009 16:21 | |
колонки | Adilhan | Хочу все знать | 4 | 08-04-2008 07:43 |
|