Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2011, 08:16   #1
Алекс7
Пользователь
 
Регистрация: 13.07.2011
Сообщений: 18
По умолчанию Как считать из файла Text.LOG

Есть программа

Sub Test1()
Open "C:\Text.LOG" For Input As #1
Dim s As String, c As Range
Set c = Range("A1") 'первая ячейка
While Not EOF(1)
Input #1, s
c = s
Set c = c(2)
Wend
Close #1
End Sub


но она немного зависает, не может ли это быть связано с расширением файла Text.LOG?

Последний раз редактировалось Алекс7; 18.07.2011 в 08:22.
Алекс7 вне форума Ответить с цитированием
Старый 18.07.2011, 09:24   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

С расширением - нет, с длиной файла - да

Попробуйте Данные - Получить внешние данные - Из текста, запишите это действие в макрос.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 18.07.2011, 09:30   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ну или можете открыть этот файл при помощи Excel - командами Workbooks.Open или Workbooks.OpenText
Тоже макрос несложный получится
EducatedFool вне форума Ответить с цитированием
Старый 18.07.2011, 11:03   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Или так - сначала в массив, потом на лист:
Код:
Sub Test1()
Open "C:\Text.LOG" For Input As #1
Dim s$(), d$(), i&, j&
ReDim s(1 To Rows.Count)
While Not EOF(1)
    i = i + 1
    Input #1, s(i)
Wend
Close #1
ReDim d(1 To i, 1 To 1)
For j = 1 To i
    d(j, 1) = s(j)
Next
Range("A1:A" & i).Value = d
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 18.07.2011, 11:19   #5
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Еще вариантик:
Код:
Sub ertert()
Dim i As Long, p As String, x, y()
p = ThisWorkbook.Path & "\oscam.log" 'задайте свой путь
x = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(p, 1, False).ReadAll, vbCrLf)
ReDim y(UBound(x), 0)
For i = LBound(x) To UBound(x): y(i, 0) = x(i): Next
[a1].Resize(UBound(x)).Value = y
End Sub
nilem вне форума Ответить с цитированием
Старый 18.07.2011, 12:12   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Поэкспериментировал с файлом 912 кб ( http://forum.ixbt.com/topic.cgi?id=23:41951#13 ). Время в секундах:

Исходный макрос: 2,08
Через массив: 0,27
nilem: 0,36
данные - Из текста: 1,06
Workbooks.OpenText: 0,56
Workbooks.Open: 0,28
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 18.07.2011, 13:18   #7
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Поэкспериментировал с файлом 912 кб ( http://forum.ixbt.com/topic.cgi?id=23:41951#13 ). Время в секундах:

Исходный макрос: 2,08
Через массив: 0,27
nilem: 0,36
данные - Из текста: 1,06
Workbooks.OpenText: 0,56
Workbooks.Open: 0,28
Алексей если не сложно замерь на своих условиях и такой вариант:

Код:
Option Explicit
Sub ImportTxtFile()
'R Dmitry dg_rusak@mail.ru
Dim cn, rs
Application.ScreenUpdating = False
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=D:\;Extended Properties='text;HDR=No'" ' полный путь к файлу
Set rs = CreateObject("ADODB.Recordset")
Set rs = cn.Execute("SELECT * FROM DANNYE.txt") 'указать файл
Cells(1, 1).CopyFromRecordset rs
cn.Close
Set cn = Nothing
Application.ScreenUpdating = True
End Sub
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 18.07.2011, 13:29   #8
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

хотя похоже что будет долго
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 18.07.2011, 14:20   #9
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Дмитрий,
не получается вставить путь к файлу - ошибка в команде cn.Open:

Строка 'c:\temp\File14.txt' задает ошибочный путь

Пробовал и в апострофах, и в кавычках. Как составить правильную команду?
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 18.07.2011, 14:50   #10
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Дмитрий,
не получается вставить путь к файлу - ошибка в команде cn.Open:

Строка 'c:\temp\File14.txt' задает ошибочный путь

Пробовал и в апострофах, и в кавычках. Как составить правильную команду?
из темпа адо обычно не работает
я там чуть неправильно написал
"Data Source=c:\temp\;Extended Properties='text;HDR=No'" ' полный путь к файлу, правильно к папке
а в selecte указываем файл как таблицу просто его имя File14.txt

Set rs = cn.Execute("SELECT * FROM File14.txt")

но при таком подходе все считывает довольно быстро, но автоматом разбивает на столбцы, поэтому медленно получается

в Ваших вариантах один столбец а в моем 19
копался в MSDN так и не нашел параметр который устанавливает разделитель по столбцам в ADO
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание log файла в сервисе nikcpp Общие вопросы Delphi 9 26.04.2011 19:49
как считать с текстового файла? denim1 Помощь студентам 2 16.05.2010 15:06
как считать из файла строки LOST94 Общие вопросы C/C++ 8 24.03.2010 20:54
Помогите с обработкой LOG файла Dark_KRONOS Помощь студентам 13 15.01.2010 15:19
Как считать массив из файла? Ronin021992 Общие вопросы C/C++ 4 16.12.2009 20:44