Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Расположение текста в файле в 2 колонки

Ответить
Настройки темы
CMD/BAT - Расположение текста в файле в 2 колонки

Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток!

Текстовый файл содержащий большое количество справок. Справки расположены в одну колонку, представляют собой текстовый блок шириной в 44 символа и длиной в 17 строк. Между ними 1-2 пустые строки для разрезания. Эти справки будут печататься на рулонной бумаге на матричном банковском принтере. Для экономии бумаги и времени нужно чтобы все справки располагались в 2 колонки, допустим уже с 47 позиции символа. Т.е. на одном уровне должно располагаться справка 1-2, ниже 3-4 и т.д. Длина блока одинаковая, но лучше рассмотреть такой вариант когда длины разные и нужно дополнение нужного количества строк до длины самого длинного блока - тогда после расположения справок в 2 колонки между ними будет промежуток для разрезания. Определение длины са мого длинного блока в принципе если сильно сложно можно вводить как параметр и определять визуально вручную. Главное - текст расположить в 2 колонки.

Попробуем?

P.S. А может если ширина бумаги позволяет даже замахнуться на расположение в 3 колонки? Желательно бы регулировать ...
Когда то я эту задачу решал копирование блока в ФАРе и вставкой, НО длина блоков может быть разная и потом не порежишь и нумерация не атк как нужно была: 2 колонка продолжала с того номера на каком заканчивалась 1 колонка ...

Отправлено: 19:08, 26-08-2009

 

Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Конкретнее: чем начинается справка, чем кончается. Особенно это необходимо, если справки разной длины. Фраза "длиной в 17 строк. Между ними 1-2 пустые строки" не очень годится для программирования - должно быть что-то жесткое. А, в принципе, задачка легко решается VBS-скриптом.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 00:24, 27-08-2009 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Serg2010, батники плохо подходят для обработки произвольного текста, так как некоторые символы текста могут совпасть с метасимволами самого командного интерпретатора (например, "&|^")

Отправлено: 09:32, 27-08-2009 | #3


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата:
батники плохо подходят для обработки произвольного текста
Цитата:
задачка легко решается VBS-скриптом.
-то есть я предполагаю решать задачу на Visual Basic Script, там мне не известны проблемы с текстовыми символами. Это средство имеется в наличии на каждом компьютере с системой, начиная с Windows 98. Попутно - сколько ориентировочно строк в текстовом файле? Это существенно для организации оптимального чтения - записи файла.

Последний раз редактировалось megaloman, 27-08-2009 в 10:28.


Отправлено: 10:06, 27-08-2009 | #4


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить 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
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Serg2010, ESC-последовательности случайно не используются?

Отправлено: 06:37, 28-08-2009 | #6


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Serg2010, Естественно, при применеиии по исходному тексту непечатных символов, управляющих работой принтера, результат работы моего скрипта при печати будет непредсказуемым, хотя, формально, он текст разобъет на колонки.
Но как поставлена задача ... В принципе, можно просмотреть исходный текст и уничтожить все непечатные символы, но в ESC последовательности может входить что угодно, поэтому этого делать нельзя. Но, судя по тому, что Вам хватало и редактора FAR, проблем не должно возникнуть.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 18:31, 28-08-2009 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Расположение текста в файле в 2 колонки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход