Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Помогите с чтением из TXT Добавлено: 29.07.08 16:40  

Автор вопроса:  Tolya
Требуется, что бы пограмма читала последнюю строку в файле TXT.
Open "c:\text.txt" For Input As 1
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-сайт: houselab.narod.ru
 Профиль | | #2
Добавлено: 29.07.08 19:35
Мне нужно что-то подобное но с последней.

- А сам то ты как думаешь это реализовать?
Делись :)

Требуется, что бы пограмма читала последнюю строку в файле TXT.

- Открывай и читай с конца к началу блоками. В блоках ищи 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
а че не прочитать весь файл типа:

Open "c:\text.txt" For Input As 1
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
Dim st() As String = IO.File.ReadAllText("c:\text.txt";)
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-сайт: houselab.narod.ru
 Профиль | | #13
Добавлено: 30.07.08 18:59
Я бы сместился в конец файла и читал, скажем, по килобайту, двигаясь к началу, пока не встретится перенос строки.

- Спасибо за поддержку :)

Нафига надо навичку забивать голову побайтовым чтением файла?

1. Про побайтовое чтение никто не говорил
2. ИМХО если новичек не будет забивать себе голову - он так и останется новичком.

Ответить

Номер ответа: 14
Автор ответа:
 Abiron



Вопросов: 30
Ответов: 62
 Профиль | | #14 Добавлено: 30.07.08 19:04
Так ты не говори что бы ты сделал. Хочешь помочь так выложи пример кода с пояснениями или без них. То, что сейчас происходит-пространственные рассуждения в ответ на конкрутный простой вопрос вопрос. Ведь от твоего предложения легче не станет...

Ответить

Номер ответа: 15
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #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

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам