Страница: 1 | 2 |
Вопрос: Помогите с чтением из TXT
Добавлено: 29.07.08 16:40
Автор вопроса: Tolya
Требуется, что бы пограмма читала последнюю строку в файле TXT.
Line Input #1, txtstroka
Close #1
здесь программа читает первую строку. Мне нужно что-то подобное но с последней.
Ответы
Всего ответов: 26
Номер ответа: 1
Автор ответа:
Abiron
Вопросов: 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
- А сам то ты как думаешь это реализовать?
Делись
- Открывай и читай с конца к началу блоками. В блоках ищи VBCRLF. Возможен вариант когда конец блока - chr(13), а начало следующего - chr(10) - это нужно учесть.
Нашел последний VBCRLF - всё что после него - последняя строка файла. Не нашел ни одного - весь файл - последняя строка.
Дерзай
Номер ответа: 3
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #3
Добавлено: 30.07.08 09:45
Считать весь файл в одну строку и разбить эту строку сплитом в массив строк, а там читай откуда и куда хочешь.
Номер ответа: 4
Автор ответа:
Abiron
Вопросов: 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
Автор ответа:
J. Smith
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
Автор ответа:
J. Smith
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
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #7
Добавлено: 30.07.08 10:33
а че не прочитать весь файл типа:
Do While Not EOF(1)
Line Input #1, txtstroka
Loop
Close #1
msgbox txtStroka
Номер ответа: 8
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #8
Добавлено: 30.07.08 14:54
MessageBox.Show(st(st.GetUpperBound(0))
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 30.07.08 17:15
ReadAllText - он же по идее возвращает String а не String(), как ты его к массиву присваиваешь? Я думаю даже не скомпилируется.
По теме - вернее было бы IO.File.ReadAllLines но решение неразумное - ради одной последней строки приходится грузить целый файл в память.
Я бы сместился в конец файла и читал, скажем, по килобайту, двигаясь к началу, пока не встретится перенос строки.
Правда не знаю как будет с UTF-8, тттттттттам же кажется размер символа не фиксирован, то есть может больше одного байта...
Номер ответа: 10
Автор ответа:
Abiron
Вопросов: 30
Ответов: 62
Профиль | | #10
Добавлено: 30.07.08 17:54
Я думаю уже хватит. Для такого задания уйма вариантов(хорошо никто контрол не предложил). Автору этого должно хватить.
Номер ответа: 11
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #11
Добавлено: 30.07.08 18:26
А почему ты думаешь что ты должен решать, хватит или не хватит?
Номер ответа: 12
Автор ответа:
Abiron
Вопросов: 30
Ответов: 62
Профиль | | #12
Добавлено: 30.07.08 18:46
Я так не думаю, просто пытаюсь порядок навести. И если у тебя с чтением напряг, то азбуку купи. Я только высказал свое мнение. Нафига надо навичку забивать голову побайтовым чтением файла? Я понимаю, тебе как програмеру хочется показать свою смекалку и ум, но может надо писать так, чтоб помагало научится человеку, а не попонтоватся тебе?
Номер ответа: 13
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #13
Добавлено: 30.07.08 18:59
- Спасибо за поддержку
1. Про побайтовое чтение никто не говорил
2. ИМХО если новичек не будет забивать себе голову - он так и останется новичком.
Номер ответа: 14
Автор ответа:
Abiron
Вопросов: 30
Ответов: 62
Профиль | | #14
Добавлено: 30.07.08 19:04
Так ты не говори что бы ты сделал. Хочешь помочь так выложи пример кода с пояснениями или без них. То, что сейчас происходит-пространственные рассуждения в ответ на конкрутный простой вопрос вопрос. Ведь от твоего предложения легче не станет...
Номер ответа: 15
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #15
Добавлено: 30.07.08 19:27
Почему автор то молчит? :\
- ну, как то так:
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