Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чтение большого файла / 18 сообщений из 18, страница 1 из 1
10.06.2009, 13:48
    #36035477
Realmk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
У меня есть текстовый файл, около 4 ГБ, его надо переработать...

Код: plaintext
1.
2.
3.
4.
5.
dim z as string
k = CStr("F:\temp\1.txt")
Open k For Input As # 1 
Do While Not EOF( 1 )
Line Input # 1 , zz
Loop

На моменте line input подвисает напрочь, не читает ни одной строки.
Может в файле строки как-то не обозначены...

В общем как это исправить? Может по-другому как-то читать этот файл?
Объясните плиз.
...
Рейтинг: 0 / 0
10.06.2009, 16:14
    #36035893
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
Realmk,

Может просто слишком долго открывается файл? Вы его вручную попробуйте открыть. Потом, у меня вопросы. Зачем Вы строку переводите в строку? Какой тайный смысл? И для чего декларируете переменную z? И где декларация zz? И у меня ощущение, что с кодом что-то неладно, т.к. Ваш "dim z as string" не с заглавных букв. Это нехороший признак. Вы не замечали?

Успехов
...
Рейтинг: 0 / 0
11.06.2009, 05:40
    #36036695
Realmk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
Выяснил что проблема в том, что в конце строки в моем файле стоит chr(10) а не chr(13)chr(10)
и line input не понимает что наступил конец строки и пытается проглотить весь файл.
Как по-другому можно построчно считать, а-то посимвольно он его 3 часа обрабатывал...
...
Рейтинг: 0 / 0
11.06.2009, 08:12
    #36036743
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
читайте блоками

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
11.06.2009, 10:30
    #36036984
Realmk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
HandKot, подскажите плиз как это делается?
...
Рейтинг: 0 / 0
11.06.2009, 11:47
    #36037235
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
А попробуй так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Dim Fsys As Object
    Set Fsys = CreateObject("Scripting.FileSystemObject")
    Dim Tstream As Object
    Set Tstream = Fsys.OpenTextFile("c:\install.txt",  1 )
    Dim z As String
    While Not Tstream.AtEndOfStream
      z = Tstream.ReadLine
      'MsgBox (z)
    Wend
...
Рейтинг: 0 / 0
11.06.2009, 16:42
    #36038090
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
HandKotчитайте блоками
I Have Nine Lives You Have One Only
THINK!

Так просто у него не получится - обратите внимание на размер его файла в первом письме. Так что только через API. Или принять это как повод перехода на VB.NET для данного приложения...
...
Рейтинг: 0 / 0
11.06.2009, 17:21
    #36038190
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
AndrFHandKotчитайте блоками
I Have Nine Lives You Have One Only
THINK!

Так просто у него не получится - обратите внимание на размер его файла в первом письме. Так что только через API. Или принять это как повод перехода на VB.NET для данного приложения...

ну почему же
вот чтение по 100 байт

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Public Sub test()
    Dim s As String
    Open "Имя файла" For Binary As # 1 
    While Not EOF( 1 )
        s = Input( 100 , # 1 )
        Debug.Print s
    Wend
    Close # 1 
End Sub

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
14.06.2009, 17:27
    #36040332
F7H6G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
точно не помню но помоему Dim s As String не может быть длиннее 2гб.
...
Рейтинг: 0 / 0
14.06.2009, 20:04
    #36040458
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
да Вы правы F7H6G
но никто и не собирается в строку пихать такой объем
как минимум будут очень большие тормоза

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
15.06.2009, 11:00
    #36040906
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
HandKotда Вы правы F7H6G
но никто и не собирается в строку пихать такой объем
как минимум будут очень большие тормоза

У Long-а есть так же есть предел. В принципе, конечно, одинаковыми кусками читать, скорей всего, можно. А вот выборочно - уже нет.
...
Рейтинг: 0 / 0
15.06.2009, 13:40
    #36041354
Realmk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
fortibransaА попробуй так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Dim Fsys As Object
    Set Fsys = CreateObject("Scripting.FileSystemObject")
    Dim Tstream As Object
    Set Tstream = Fsys.OpenTextFile("c:\install.txt",  1 )
    Dim z As String
    While Not Tstream.AtEndOfStream
      z = Tstream.ReadLine
      'MsgBox (z)
    Wend


вот так читает...

побайтовое чтение не интересно ибо всё равно посивольно разбирать придётся

всем спасибо!
...
Рейтинг: 0 / 0
15.06.2009, 21:33
    #36042326
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
Realmk,

можно и через ado попробовать открыть.
...
Рейтинг: 0 / 0
16.06.2009, 14:43
    #36043701
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
Кстати How To Seek Past VBA's 2GB File Limit


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16.06.2009, 16:06
    #36043956
ПРИМЕРЧИК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
...
Рейтинг: 0 / 0
16.06.2009, 16:45
    #36044108
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
> Автор: ПРИМЕРЧИК
> этот примерчик читает большие файлы довольно быстро

Что Вы говорите! А не пробовали запускать этот примерчик на файлах больше 2Гб
MSDNLOF Function
Returns a Long representing the size, in bytes, of a file opened using the Open statement

[qout MSDN]Long data type

A 4-byte integer ranging in value from -2,147,483,648 to 2,147,483,647. The ampersand (&) type-declaration character
represents a Long in Visual Basic.[/quot]

;)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
17.06.2009, 16:45
    #36046475
ПРИМЕРЧИК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
Игорь Горбонос Да Вы правы, ничего не получилось. Функцию LOF() придётся обходить системными ф-циями.
Но да же если её заменить, (я создал файл более 2 гиг, а результат этой фукции прописал ручками)
то на чтение и поиск "искомого слова" в этом файле у меня ушло 16 минут.
...
Рейтинг: 0 / 0
17.06.2009, 17:34
    #36046637
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение большого файла
> Автор: ПРИМЕРЧИК
> Игорь Горбонос Да Вы правы, ничего не получилось. Функцию LOF() придётся обходить системными ф-циями.

я бы вообще все заменил на системные функции

> Но да же если её заменить, (я создал файл более 2 гиг, а результат этой фукции прописал ручками)
> то на чтение и поиск "искомого слова" в этом файле у меня ушло 16 минут.

Вот этого не проверял, но думаю что в любом случае задержки не снизить до приемлимого уровня комфортной работы на таких
объёмах :(


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чтение большого файла / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]