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

  • Автор темы kolian2009
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

kolian2009

Гость
#1
Помогите решить проблему( на 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. всем заранее

спасибо.
 
K

kolian2009

Гость
#2
Ну где же вы, супер-программисты?.....
 

alex77755

Well-Known Member
15.02.2009
128
0
#3
Ну где же вы, супер-программисты?.....
100МБайт - около 8 листов экселя
затем мне надо построить графики значений от времени
Один график по 8 листам?
Может сразу разбить лучше по каким-то критериям? Например по датам(если она будет меняться)
Да и образец фала(кусок) не помешает.
 
K

kolian2009

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

Вложения

alex77755

Well-Known Member
15.02.2009
128
0
#5
Один график по 8 листам?
Может сразу разбить лучше по каким-то критериям? Например по датам(если она будет меняться)
Да и образец фала(кусок) не помешает.
вот так можно считывать построчно и заносить в массив(количество строк - костанта. можно менять),
При наполнении массива - вываливается на лист и смещается на шаг(у меня 4)
Пробовал на файле 360 М. Лист заполнил и вылетел с ошибкой, так как не предусмотрел переход по листм. Но это всего пару строк ещё:
Добавил добавление листа и печать время начало-конец

7:33:05
7:36:23


Код:
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
 
K

kolian2009

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

alex77755

Well-Known Member
15.02.2009
128
0
#7
Вписать полный путь к файлу
Либо как у меня положить рядом с книгой
На какой строке ругается?
 

alex77755

Well-Known Member
15.02.2009
128
0
#9
пишет ошибку 52, не нравится строка

Set Tstream = Fsys.OpenTextFile(FL)

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

kolian2009

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

VerhoLom

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

alex77755

Well-Known Member
15.02.2009
128
0
#13
А кто генерирует эти файлы? Не проще ли заменить пробелы (в качестве разделителя) на запятые и сохранить в файл с расширением csv? :crash: Эксель прекрасно его читает. А уже потом дописать макросы для построения графиков и прочей ерунды? Зачем усложнять себе жизнь? :sam_takoi:
Прочитай сначала требования автора! Ексел 2003 строки не помещаются в 65536
 
Статус
Закрыто для дальнейших ответов.