автоматизированный сбора данных из больших (до 100мБ) текстовых файло

Тема в разделе "Visual Basic", создана пользователем kolian2009, 2 ноя 2010.

Статус темы:
Закрыта.
  1. kolian2009

    kolian2009 Гость

    Помогите решить проблему( на VB встроенном в эксель,наверно): написать
    макрос для автоматизированного Сбора данных из больших (до 100мБ) текстовых файлов (.txt)с разделителями в виде

    пробелов.данные в виде:
    15.07.2010 2:06:43,695 21YCS00FX001AXQ01 0.000 % дост Мощность в РД1
    15.07.2010 2:06:45,696 21YCS00FX001AXQ01 0.000 % нд Мощность в РД1
    найденные примеры не понял. Дату и время надо склеить. Можно сделать в 3 столбца: дата-время ,

    кодировка, числовое значение(0.000) .Большой размер мешает отправить на 1 лист экселя2003(65536

    знаений - мах). 100МБайт - около 8 листов экселя. В 2007-м экселе не делаю, т.к. там очень не

    удобно строить графики.(затем мне надо построить графики значений от времени).

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

    писал: ДД.ММ.ГГ ч:мм:сс (до этого я их склеивал). дата и время: 15.07.2010 2:06:43,695. Можно то ,что

    после запятой отбросить, запятая - отделяет миллисекунды от секунд. А Формат вроде я сам опрелял при

    конвертации из тексторого файла в эксель - как числовые(у меня- 0.000,дальше другие значения), часть

    как ДД.ММ.ГГ ч:мм:сс и как текст - у меня 21YCS00FX001AXQ01. всем заранее

    спасибо.
     
  2. kolian2009

    kolian2009 Гость

    Ну где же вы, супер-программисты?.....
     
  3. alex77755

    alex77755 Well-Known Member

    Регистрация:
    15 фев 2009
    Сообщения:
    128
    Симпатии:
    0
    Один график по 8 листам?
    Может сразу разбить лучше по каким-то критериям? Например по датам(если она будет меняться)
    Да и образец фала(кусок) не помешает.
     
  4. kolian2009

    kolian2009 Гость

    вот образец файла. мне важен перевод из .тхт в эксель. графики знаю как строить.
     

    Вложения:

  5. alex77755

    alex77755 Well-Known Member

    Регистрация:
    15 фев 2009
    Сообщения:
    128
    Симпатии:
    0
    вот так можно считывать построчно и заносить в массив(количество строк - костанта. можно менять),
    При наполнении массива - вываливается на лист и смещается на шаг(у меня 4)
    Пробовал на файле 360 М. Лист заполнил и вылетел с ошибкой, так как не предусмотрел переход по листм. Но это всего пару строк ещё:
    Добавил добавление листа и печать время начало-конец

    7:33:05
    7:36:23


    Код (LotusScript):
    Option Explicit
    Const RB = 65500
    Public Sub MakeSchema()
    Dim S() As String
    Dim FL
    Dim R, C
    Dim NUM
    Dim BLOK(1 To RB, 1 To 3)
    Debug.Print Time

    FL = Application.ActiveWorkbook.Path & "\MB.txt"
    R = 1
    NUM = 1
    Dim Fsys As Object
    Set Fsys = CreateObject("Scripting.FileSystemObject")
    Dim Tstream As Object
    Set Tstream = Fsys.OpenTextFile(FL)
    Dim z As String
    While Not Tstream.AtEndOfStream
    z = Tstream.ReadLine
    If Len(z) < 40 Then GoTo 1 ' äëÿ ïðîïóñêà çàãîëîâêà

    '    Debug.Print z
    S = Split(Replace(z, Chr(9), Chr(32)))
    BLOK(R, 1) = S(0) & " " & Mid(S(1), 1, InStr(1, S(1), ","))
    BLOK(R, 2) = S(2)
    BLOK(R, 3) = S(3)
    R = R + 1
    If R = RB + 1 Then
    Range(Cells(1, NUM), Cells(RB, NUM + 2)).Value = BLOK
    NUM = NUM + 4
    Cells(1, NUM).Select
    If NUM > 250 Then
    ActiveWorkbook.Sheets.Add
    NUM = 1
    End If
    R = 1
    Erase BLOK
    DoEvents
    End If
    1
    Wend
    Debug.Print Time
    End Sub
     
  6. kolian2009

    kolian2009 Гость

    твой код забивать в VBAProject\Module ? Выдает ошибку 52 : bad file name or number.
    В
    FL = Application.ActiveWorkbook.Path & "\MB.txt"
    писать директорию ? я так и сделал.
     
  7. alex77755

    alex77755 Well-Known Member

    Регистрация:
    15 фев 2009
    Сообщения:
    128
    Симпатии:
    0
    Вписать полный путь к файлу
    Либо как у меня положить рядом с книгой
    На какой строке ругается?
     
  8. kolian2009

    kolian2009 Гость

    пишет ошибку 52, не нравится строка

    Set Tstream = Fsys.OpenTextFile(FL)

    он не видит что ли моего .тхт файла ?
     
  9. alex77755

    alex77755 Well-Known Member

    Регистрация:
    15 фев 2009
    Сообщения:
    128
    Симпатии:
    0
    попробуй вариант:
    пуск - выполнить - обзор (типы файлов - все файлы) и укажи путь к файлу. Сравни с тем, что непечатает в дебаггере
    Код (LotusScript):
    Debug.Print FL
    Set Tstream = Fsys.OpenTextFile(FL)
    Обрати внимание, что если ексел-документ и текстовик на разных дисках - может не открывать. Макросом не предусмотрена смена активного диска. Поэтому я делаю просто: ложу рядом с екселовским файлом текстовик и пользуюсь App.Path
     
  10. kolian2009

    kolian2009 Гость

    В "дебаггере" он пишет ошибку. Расположил ексель и .тхт в одной папке. все равно ошибка(.
     
  11. alex77755

    alex77755 Well-Known Member

    Регистрация:
    15 фев 2009
    Сообщения:
    128
    Симпатии:
    0
  12. VerhoLom

    VerhoLom Гость

    А кто генерирует эти файлы? Не проще ли заменить пробелы (в качестве разделителя) на запятые и сохранить в файл с расширением csv? ;) Эксель прекрасно его читает. А уже потом дописать макросы для построения графиков и прочей ерунды? Зачем усложнять себе жизнь? ;)
     
  13. alex77755

    alex77755 Well-Known Member

    Регистрация:
    15 фев 2009
    Сообщения:
    128
    Симпатии:
    0
    Прочитай сначала требования автора! Ексел 2003 строки не помещаются в 65536
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей