Страница: 1 | 2 |
Вопрос: Помогите с чтением из TXT
Добавлено: 29.07.08 16:40
Автор вопроса: Tolya
Ответы
Всего ответов: 26
Номер ответа: 16
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #16
Добавлено: 30.07.08 19:34
#10:
#12:
У кого тут напряг с чтением?
Нафига? Тебе например нинафига, а кому-то эти советы могут помочь.
И кстати про побайтное чтение речь не шла, я например вел речь про "килобайтное" - разницу видишь?
О чем ты? Никакая смекалка не нужна для того чтоб оптимально найти начало последней строки в файле.
А то что мы написали не поможет разве?
Не говори ерунду
Если бы я хотел попонтоваться, я бы рассказал как можно выполнить нормализацию базы данных википедии (больше двух гигабайт) из формата XML в формат SQL Server, и сколько времени это занимает.
Это форум где помогают решить проблемы людей, а не решают их в полном объеме (иначе это бы называлось консалтингом и стоило бы очень дорого)
Номер ответа: 17
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #17
Добавлено: 31.07.08 00:27
Бренд смотри
Open "c:\text.txt" For Input As 1
Do While Not EOF(1)
Line Input #1, txtstroka
Loop
Close #1
вот код Arseny он идеален для начиющего и для опытного прогера.
Да канешно мы лопатим весь файл.и если файл будет большым то прога подвиснет и не будет отвичать но мы можем дописать dovensts и всё бдет ок.время не уменшитса но прога не будет висеть))))
в конце мы получим то что требуетса.последнюю строку
вот етот код
 im tmpStr As String
 im Arry() As String
Open "license.txt" For Input Access Read As 1
tmpStr = Input(LOF(1), 1)
Close
If Right$(tmpStr, 1) = vbLf Then tmpStr = Left$(tmpStr, Len(tmpStr) - 2)
с Кодом Серёги лень розбиратса уж очень большой.
может и быстрее работает чем указаный мною идеальный)))
идеальный он потому что там пару строчек)))
Arry = Split(tmpStr, vbCrLf)
MsgBox Arry(UBound(Arry))
чуть не идеалне если файл будет большой хана нашей проге.
нащот как єто зделать в .нет беспонятия.может там можно как то похитрому.
Номер ответа: 18
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #18
Добавлено: 31.07.08 00:30
согласен когда я еще не был зареган на этом форуме.я отцюда выкачивал 100 страниц форума.здесь все детально обсуждалось велись дискусии.короче очень интересно.
а ща на форуме остался один умный человек(не знаю где остальный) и то ему упрекают.
Все норм Артём
Номер ответа: 19
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #19
Добавлено: 31.07.08 01:45
Номер ответа: 20
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #20
Добавлено: 31.07.08 08:23
Сори, ввожу новичков в заблуждение.
Если файл будет очень большой, то эта конструкция лопнет.
If Right$(tmpStr, 1) = vbLf Then tmpStr = Left$(tmpStr, Len(tmpStr) - 2)
В таких случаях действительно быстрее всего читать бинарно с конца файла.
Номер ответа: 21
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #21
Добавлено: 31.07.08 13:19
да канешно кажетса такое простое задания но много нюансов.
вот например а если файл будет 500 метров и всё в одну строку это же будет ппц.
думаю нада будет с конца по одному символу вытаскивать.смотреть если равно vbLf и следущий равен vbcr тогда вот откуда нам нада читать.
Номер ответа: 22
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #22
Добавлено: 31.07.08 14:12
Настоящий пипец начнется если ему свободной оперативки нехватит
Двигаясь от конца к началу файла читаем байты и если считанный байт не vbLf, то прибавляем его в начало считанной строки, иначе прекращаем чтение.
Туева хуча таких нюансов, заметь, автор об объеме файла умолчал, в моей практике был случай когда в одну строковую переменную файл в 200 метров ложился, но это естессно не ТХТ-шник был, а урезанный дистриб офиса.
Номер ответа: 23
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #23
Добавлено: 31.07.08 14:59
серавно я не знаю что делать если файл будет большой читать то мы будем.но вот я не рекомендую так вот сразу если не vbLf добавлять куда то єтот символ.они загрузят всю оперативку прогама начнет работать медленей а потом и вовсе заглохнет.
вот опка что так
ищем символ vblf от конца если нашли смотрим какой он по пордку и уже от него идём до конца закидывае все это куда то...
все впираетса в размере файла.
Номер ответа: 24
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #24
Добавлено: 31.07.08 17:21
Читать с конца не по одному символу а блоками, иначе чтение будет неоптимально идти.
Если как ты говоришь, весь файл - одна большая строка, то конечно не самый оптимальный вариант, но нужно просто накапливать считанные данные - все что считано с конца до переноса строки и будет являться последней строкой.
Номер ответа: 25
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #25
Добавлено: 31.07.08 20:31
да уж, по байту читать - это плохо. Когда делал копирование файлов убедился в этом после экспериментов с блоками)
Номер ответа: 26
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #26
Добавлено: 31.07.08 22:54
вообщем достачно муторное дело но так как автор не появляетса можна дальше не обсуждать нада будет кому то зделает вариантов много и каждій под какой то отдельный случай пока универсального не предумал.
что бы учесть все возможные варианты