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

Показать сообщение отдельно

Ветеран


Contributor


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

Профиль | Отправить 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