Работа текстовыми файлами

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Работа текстовыми файлами

Сообщение baranich » 23.08.2005 (Вт) 11:01

Помогите, у меня есть текстовый документ, содержание которого состоит из четырех строк.
на VB написана прога, которая читает этот файл и записывает новые данные в файл.
Сделано так что, когда какой-то строки нет он выдает сообщение что (неверный формат файла), но если залесть в файл и удалить строку самому и сместить другую строку вверх , то возникает ошибка -
input past end of file
КАК сделать чтобы и в этом случае выдавалось сообщение (неверный формат файла).

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 11:04

при открытии делай счетчик и проверяй строки на ""
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 23.08.2005 (Вт) 11:06

Есть такая функция - EOF. Проверяет, находишься ли ты в конце файла. Еще, на всякий случай, есть LOF и Loc. Читай дальше хелп.

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 23.08.2005 (Вт) 13:39

Можно поподробнее на счет счетчика, я с ним парусь не первый час.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 23.08.2005 (Вт) 13:45

Забей на счетчик и читай хелп про EOF 8)

max-aziat
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 13.06.2005 (Пн) 13:41
Откуда: Таджикистан

Сообщение max-aziat » 23.08.2005 (Вт) 13:57

ну да про EOF не слыхал что лы???
не всё сразу дается ...

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 23.08.2005 (Вт) 14:01

Конечно EOF это хорошо и спасибо за совет, но мне надо сделать через FSO.

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 23.08.2005 (Вт) 14:11

всем спасибо за советы, я уже сделала

max-aziat
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 13.06.2005 (Пн) 13:41
Откуда: Таджикистан

Сообщение max-aziat » 23.08.2005 (Вт) 14:14

рады что ты смог
не всё сразу дается ...

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 24.08.2005 (Ср) 8:43

Ребята, такая проблема, в проги предусмотрено, если файл отсутствует, то программа создает новый и открывает форму, четыре TEXTBOX на форме должно быть пустые, но программа выдает ошибку input past end in file. Что делать?

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 24.08.2005 (Ср) 8:55

и еще воросик, если в хотя бы один TEXTBOX пуст то выскакивает MsgBox с предупреждением, но если две строки и более пусты, то на каждый пустой TEXTBOX выскакивает свое сообщение, может четыре сообщение подряд выскачить, как ограничить число сообщений до одного?

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 24.08.2005 (Ср) 9:09

Код: Выделить всё

if txt1.text ="" and txt2.text = "" then
msgbox ""
end if
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

n-soft
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 24.08.2005 (Ср) 8:53

Сообщение n-soft » 24.08.2005 (Ср) 9:09

там есть возможность впихнуть в переменую всю строку если переменая пустая....то
Сделай что нибудь......хорошее!

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 24.08.2005 (Ср) 9:10

baranich писал(а):Ребята, такая проблема, в проги предусмотрено, если файл отсутствует, то программа создает новый и открывает форму, четыре TEXTBOX на форме должно быть пустые, но программа выдает ошибку input past end in file. Что делать?


телепаты в отпуске
код в студию :!:
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 24.08.2005 (Ср) 9:30

lord0n:
if txt1.text ="" and txt2.text = "" then
msgbox ""
end if

у меня textbox сделаны через массив:
For i = 0 To 3
If text1(i) = "" Then
knopka1 = MsgBox("",vbOKOnly + vbExclamation, "")
If knopka1 = vbOK Then
form.Show
End If
End If
Next

sash
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.05.2003 (Сб) 3:37

Сообщение sash » 24.08.2005 (Ср) 9:35

Попробуй так:
Код: Выделить всё

For i=0 to 3
   If len(trim$(text(i).text))=0 then
       knopka1=MSGBOX(msgText,vbOkOnly + vbExclamation, msgTitle)
       exit for
    end if
next
if knopka1=vbOk then form.Show

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

телепаты в отпуске

Сообщение baranich » 24.08.2005 (Ср) 9:38

If Dir$("c:\testfile.txt") = "" Then
knopka = MsgBox("", vbOKOnly + vbExclamation, "")
If knopka = vbOK Then
form.Show
Set ff = File.CreateTextFile("c:\testfile.txt")
Set rr = File.GetFile("c:\testfile.txt")
Set a1 = rr.OpenAsTextStream(ForReading)
qq = FreeFile
Open "c:\testfile.txt" For Input As #qq
While Not EOF(qq)
Input #qq, line
ii = ii + 1
Wend
If i i< 4 Then
For i = 0 To ii
text1(i).Text = a1.ReadLine
Next
a1.Close
End If
End If
это тот фрагмент проги, который глючит

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 24.08.2005 (Ср) 9:42

Спасибо sash, твой совет пригодился.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 24.08.2005 (Ср) 9:50

в каком месте глюк
а лючше прилипи проект или кусок
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 24.08.2005 (Ср) 11:07

в каком месте глюк
а лючше прилипи проект или кусок

Спасибо уже всё сделано

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 24.08.2005 (Ср) 11:50

Надо сделать так чтобы пока Textboxы пусты, кнопка Command1 была не активна, но когда все строки заполнены, она становилась активной.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 24.08.2005 (Ср) 12:05

как все запущено.

изначально Command1.enable=false

Private Sub Text1_Change()
Command1.Enabled = (Len(Text1) + Len(Text2) + Len(Text3) + Len(Text4) > 0)
End Sub

Private Sub Text2_Change()
Command1.Enabled = (Len(Text1) + Len(Text2) + Len(Text3) + Len(Text4) > 0)
End Sub

Private Sub Text3_Change()
Command1.Enabled = (Len(Text1) + Len(Text2) + Len(Text3) + Len(Text4) > 0)
End Sub

Private Sub Text4_Change()
Command1.Enabled = (Len(Text1) + Len(Text2) + Len(Text3) + Len(Text4) > 0)
End Sub
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

baranich
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 123
Зарегистрирован: 23.08.2005 (Вт) 9:00

Сообщение baranich » 24.08.2005 (Ср) 12:57

надо чтоб он воспринимал не длину, а именно символы, а так можно с помощью пробелов увеличить длину, а текста нет. Нужен другой код.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 24.08.2005 (Ср) 13:28

используй trim
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

sash
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.05.2003 (Сб) 3:37

Сообщение sash » 24.08.2005 (Ср) 14:59

Так вроде правильней будет:

Код: Выделить всё

Private Sub Text1_Change()
     Command1.Enabled = Len(Trim$(Text1)) AND _
                        Len(Trim$(Text2)) AND _
                        Len(Trim$(Text3)) AND _
                        Len(Trim$(Text4))
End Sub


аналогично для остальных полей.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.08.2005 (Ср) 15:08

А так еще короче :P :

Код: Выделить всё
Command1.Enabled=Len(Trim$(Text1 & Text2 & Text3 & Text4))

sash
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.05.2003 (Сб) 3:37

Сообщение sash » 24.08.2005 (Ср) 15:10

Зато если хоть одно поле не пустое (содержит что-то кроме пробелов) то вернет >0 => True. А как я понял надо чтобы все поля были заполнены.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.08.2005 (Ср) 15:15

Упс, и правда :o

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.08.2005 (Ср) 15:21

Код: Выделить всё
Command1.Enabled=(Len(Trim$(Text1) & Trim$(Text2) & Trim$(Text3) & Trim$(Text4))>0)

sash
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.05.2003 (Сб) 3:37

Сообщение sash » 24.08.2005 (Ср) 15:26

Тоже самое, достаточно 1ого заполненного поля для активации кнопки, что не соответствует условиям задачи! :D

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 23

    TopList