Вопрос: Помогите с чтением из TXT | Добавлено: 29.07.08 16:40 |
Автор вопроса: ![]() |
Требуется, что бы пограмма читала последнюю строку в файле TXT.
Open "c:\text.txt" For Input As 1
Line Input #1, txtstroka Close #1 здесь программа читает первую строку. Мне нужно что-то подобное но с последней. |
Ответы | Всего ответов: 26 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 30 Ответов: 62 |
Профиль | Цитата | #1 | Добавлено: 29.07.08 16:56 |
d=0 Open "c:\text.txt" For Input As 1 1 on error goto 2 Line Input #1, txtstroka d=d+1 goto 1 2 Close #1 Open "c:\text.txt" For Input As 1 3 If d>0 then Line Input #1, txtstroka:goto3 else Close #1 Примерно так. Если что то не так, попробуй If d>0 сменить на If d>1 или If d>-1 ну где то так. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 262809473 Вопросов: 17 Ответов: 561 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 29.07.08 19:35 |
Мне нужно что-то подобное но с последней.
- А сам то ты как думаешь это реализовать? Делись ![]() Требуется, что бы пограмма читала последнюю строку в файле TXT.
- Открывай и читай с конца к началу блоками. В блоках ищи VBCRLF. Возможен вариант когда конец блока - chr(13), а начало следующего - chr(10) - это нужно учесть. Нашел последний VBCRLF - всё что после него - последняя строка файла. Не нашел ни одного - весь файл - последняя строка. Дерзай ![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 30.07.08 09:45 |
Считать весь файл в одну строку и разбить эту строку сплитом в массив строк, а там читай откуда и куда хочешь. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 30 Ответов: 62 |
Профиль | Цитата | #4 | Добавлено: 30.07.08 09:52 |
Упс сильно ошибся. Слишком усложнил код. Так делай:
Open "c:\text.txt" For Input As 1 1 on error goto 2 Line Input #1, txtstroka goto 1 2 msgbox txtstroka Вот так. Тот пример выводил любую строку с конца(В зависимости от If d>0) |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 30.07.08 10:11 |
Можно и так, но если файл большой...
Dim tmpStr As String Open "license.txt" For Input Access Read As 1 Do Line Input #1, tmpStr Loop Until EOF(1) Close MsgBox tmpStr |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: ненавижу Вопросов: 40 Ответов: 477 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 30.07.08 10:20 |
то лучше так:
Dim tmpStr As String Dim 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)) |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ICQ: 298826769 Вопросов: 53 Ответов: 1732 |
Профиль | Цитата | #7 | Добавлено: 30.07.08 10:33 |
а че не прочитать весь файл типа:
Open "c:\text.txt" For Input As 1
Do While Not EOF(1) Line Input #1, txtstroka Loop Close #1 msgbox txtStroka |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #8 | Добавлено: 30.07.08 14:54 |
Dim st() As String = IO.File.ReadAllText("c:\text.txt"
![]() MessageBox.Show(st(st.GetUpperBound(0)) |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #9 | Добавлено: 30.07.08 17:15 |
ReadAllText - он же по идее возвращает String а не String(), как ты его к массиву присваиваешь? Я думаю даже не скомпилируется.
По теме - вернее было бы IO.File.ReadAllLines но решение неразумное - ради одной последней строки приходится грузить целый файл в память. Я бы сместился в конец файла и читал, скажем, по килобайту, двигаясь к началу, пока не встретится перенос строки. Правда не знаю как будет с UTF-8, тттттттттам же кажется размер символа не фиксирован, то есть может больше одного байта... |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 30 Ответов: 62 |
Профиль | Цитата | #10 | Добавлено: 30.07.08 17:54 |
Я думаю уже хватит. Для такого задания уйма вариантов(хорошо никто контрол не предложил). Автору этого должно хватить. |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #11 | Добавлено: 30.07.08 18:26 |
А почему ты думаешь что ты должен решать, хватит или не хватит? |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 30 Ответов: 62 |
Профиль | Цитата | #12 | Добавлено: 30.07.08 18:46 |
Я так не думаю, просто пытаюсь порядок навести. И если у тебя с чтением напряг, то азбуку купи. Я только высказал свое мнение. Нафига надо навичку забивать голову побайтовым чтением файла? Я понимаю, тебе как програмеру хочется показать свою смекалку и ум, но может надо писать так, чтоб помагало научится человеку, а не попонтоватся тебе? |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 262809473 Вопросов: 17 Ответов: 561 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 30.07.08 18:59 |
Я бы сместился в конец файла и читал, скажем, по килобайту, двигаясь к началу, пока не встретится перенос строки.
- Спасибо за поддержку ![]() Нафига надо навичку забивать голову побайтовым чтением файла?
1. Про побайтовое чтение никто не говорил 2. ИМХО если новичек не будет забивать себе голову - он так и останется новичком. |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 30 Ответов: 62 |
Профиль | Цитата | #14 | Добавлено: 30.07.08 19:04 |
Так ты не говори что бы ты сделал. Хочешь помочь так выложи пример кода с пояснениями или без них. То, что сейчас происходит-пространственные рассуждения в ответ на конкрутный простой вопрос вопрос. Ведь от твоего предложения легче не станет... |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 262809473 Вопросов: 17 Ответов: 561 |
Web-сайт: Профиль | Цитата | #15 | Добавлено: 30.07.08 19:27 |
Почему автор то молчит? :\
Хочешь помочь так выложи пример кода
- ну, как то так: Private Function LastString(fName As String) As String
Dim _ ff As Integer, _ buf As String, _ i As Long, _ j As Long, _ k As Integer, _ b As Byte, _ LastStringBegin As Long ff = FreeFile Open fName For Binary As ff i = LOF(ff) If i > 512 Then j = 512 Else j = i buf = Space(j) i = i - j Do DoEvents Get ff, i + 1, buf k = InStrRev(buf, vbCrLf) If k = 0 Then If Mid(buf, 1, 1) = Chr(10) And i + 1 > 1 Then Get ff, i, b If b = 13 Then LastStringBegin = i + 2 Exit Do End If End If Else LastStringBegin = k + i + 2 Exit Do End If i = i - j If i <= 0 Then LastStringBegin = 1 Exit Do End If Loop i = LOF(ff) - LastStringBegin + 1 buf = Space(i) Get ff, LastStringBegin, buf Close ff LastString = buf End Function |
|