Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Прошу помощи с TXT файлами Добавлено: 30.01.06 14:31  

Автор вопроса:  angrynews | Web-сайт: www.angrynews.ru
Приветствую уважаемых программистов!
Описываю ситуацию:
Неспециалист, недавно начавший любитель. Решил написать минибазу для сохранеия информации о клиентах. 9 текстовых полей ввода. Данные из них идут в базу txt, причем идут в строку. Заносятся оператором PRINT, разделитель запятая. Вот код:


Open "C:\Base.txt" For Append As #1
    Print #1, Text1(0).Text, Text1(1).Text, Text1(2).Text, Text1(3).Text, Text1(4).Text, Text1(5).Text, Text1(6).Text, Text1(7).Text, Text1(8).Text
    Close #1


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

Я хочу сделать так, чтобы при поиске по данному одного из полей, инфа возвращалась обратно в текстовые поля. Мой подход был такой: выделяю строку в базе, просматриваю ее на предмет слова, если оно есть, то каждое слово строки именно этой должно помещаться в свой textbox. Слово находится без проблем, а вот дальше не могу ничего понять. Оператор INPUT не подходит, т.к. он последовательно смотрит, а мне надо сразу перейти к нужной строке. Хотя он идеально все делал, но со следующей строкой за нужной мне. И данные считывал и помещал их в переменные, но со следующей строки, и как его заставить брать их из нужной я не придумал. Значит использую GET. Перерыл кучу литературы и сайтов...толково нигде нет информации, как его использовать. Методом тыка тоже не вычислил ничего. Я хотел в пользовательский тип переменной с 9-ю полями (столько же сколько и textbox) поместить строку, как это описывается в примерах. Помещается, но как-то странно, не по порядку, слова разорваны, кол-во разное....косяк в общем.
Вот код:


Type record
    chislo      As String * 10
    den         As String * 10
    famil       As String * 10
    imya        As String * 10
    phone       As String * 10
    usluga      As String * 10
    oplata      As String * 10
    sdacha      As String * 10
    primechanie As String * 10
End Type

Private Sub Command2_Click()
    Dim danie As record
    counter = 1
    
    Open "C:\Base.txt" For Input As #1
    Do While Not EOF(1)
        Line Input #1, stroka
        If InStr(1, stroka, Text1(4).Text) > 0 Then
        Exit Do
        End If
        counter = counter + 1
    Loop
    Close #1
    
    Get #1, counter, danie
    
End Sub


В связи с этой всей фигней назрело решение спросить специалистов следующее:
1. Пользовательский тип переменной, когда он применяется?
2. Что означают *10 при описании ее полей?
3. Если я ее использую как пробовал, то каким образом в эти поля попадают данные - по порядку или...?
4. Описание оператора GET сказало, что используется одинаковая длина строк. Это как, одинаковая длина чего? При помещении в базу не надо делать пробелов и разделителей, чтобы шло сплошное слово, а потом указывать кол-во букв в описании пользовательского типа? Не понимаю...
5. При занесении данных в базу, какие разделители ставить , или ; С , есть пробелы как я описывал одинаковой со словом в сумме длины, а с ; вообще нет разрывов. Можно ли как нить это регулировать и есть ли еще какие нить типы разделителей, а если есть, то когда и как их использовать?
6. Почему иногда данные видит в кавычках а иногда без них? Принципиально ли это?

Вот вроде такая проблема и такие вопросы. Может кто порекомендует какую-нить книгу...или сайт с ответами людей на вопросы, вернее четкие комментарии при описании функции или оператора. У меня книга Сайлера и Спотса, 800 листов, но полных комментариев нет. На сайтах тоже не полностью описывается это.
Спасибо за то, что выдержали такое чтение.

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 30.01.06 15:20
1. Когда хоцца собрать в одном месте несколько переменных, относящихся к одной вещи.
2. Длина строки в символах.
3. По порядку.
4. Для организации файлов такого рода используется Random-доступ с указанием len=len(danie)
5. Никаких, ввод-вывод только через get и put.
6. Смотря как записать.

или сайт с ответами людей на вопросы

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vastmgetx.asp

Ответить

Номер ответа: 2
Автор ответа:
 GeorgeGA



Вопросов: 1
Ответов: 101
 Профиль | | #2 Добавлено: 30.01.06 15:30
powerCat
Сначала из файла берут данные, а потом закрывают, а не наоборот,как у тебя.т.е. сначала get ...,а потом close

Ответить

Номер ответа: 3
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #3 Добавлено: 30.01.06 16:36

Public Sub SaveToFile(Data$, PathFile As String)
On Error Resume Next
Kill PathFile
'Сохранение переменной в файл
   n = FreeFile
   Open PathFile For Binary As #n
   Put n, , Data$
   Close #n
End Sub

Public Function LoadTextFile(path As String) As String
'Загрузка файла в переменную
 Dim l As Long
 Dim s As String
 n = FreeFile
 Open path For Binary As #n
 l = LOF(n)
 s = String(l, vbNullChar)
 Get n, , s
 Close #n
 LoadTextFile = s
End Function

Раз 100 на форуме постил этот код...

'Записываем:
Dim txt as String, i as Integer

For i% = 0 to Ubound(Text1)
    txt$ = txt$ & Text1(i%) & ","
Next i%
Call SaveToFile (txt$, file$)

'Читаем:
txt$ = LoadTextFile (file$)
'Разбиваем на массив и заносим в текстбоксы
Dim tmpArray() as String
tmpArray = Split (txt$, ",";)

'Показуем в текстовых полях:
For i% = 0 to Ubound(Text1)
    Text1(i%) = tmpArray(i%)
Next i%

Поиск думаю теперь понятно как сделать...

Ответить

Номер ответа: 4
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 30.01.06 17:10
Тебе не понятно как работать с GET?
Для начала действительно файл неплохо было бы открыть. Открывать нужно в двоичном режиме (Binary, Random), а не в режиме Ввода-вывода (Input, Output).
Далее, прототип оператора GET такой:
GET #НомерФайла,[Позиция],Переменная
НомерФайла - это тот же номер, который ты использовал для открытия файла;
Позиция - номер байта, с которого начнётся считывание. В квадратных скобках потому что опционально, т.е. может не использоваться (GET #НомерФайла,,Запись), а вместо него будет автоматически подставлена позиция по умолчанию, которая зависит от предыдущих файловых операций. Контролировать эту позицию можно оператором и функцией SEEK;
Переменная - блок данных фиксированной длины (в VB могут быть и динамические строки, которые записываются в файл вместе с длиной). Например, это может быть пользовательский тип или строка фиксированной длины. Как только произойдёт операция чтения/записи (GET/PUT), то маркер позиции автоматически сместится на равное длине переменной количество байт.

Ответить

Номер ответа: 5
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #5
Добавлено: 31.01.06 01:19
По-моему, все забыли о команде Write #. Она как-раз делает то, что надо: разделяет поля заятыми, берет строки в кавычки при надобности. При этом для чтения можно использовать Input #

Ответить

Номер ответа: 6
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #6 Добавлено: 31.01.06 02:31
да никто не забыл, просто не используют из за не универсальности...

Ответить

Номер ответа: 7
Автор ответа:
 angrynews



Вопросов: 33
Ответов: 119
 Web-сайт: www.angrynews.ru
 Профиль | | #7
Добавлено: 31.01.06 06:25
Благодарю за ваши ответы, щас буду смотреть и разбираться. Спасибо

Ответить

Номер ответа: 8
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #8 Добавлено: 03.02.06 18:12
Используем Split. В "помогите, пожалуйста решить школьную программу в Pascal" это описано. А писать в файл хорошо бы через запятую. Тогда объединение происходит с помощью Join.

Ответить

Номер ответа: 9
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #9
Добавлено: 13.02.06 19:42
2powerCat:

*10 а это случайно не размер - типа 10 знаков

Ответить

Номер ответа: 10
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #10
Добавлено: 13.02.06 20:15
2 root: такой синтаксис используется для объявления строк
фиксированной длины.

Ответить

Номер ответа: 11
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #11
Добавлено: 13.02.06 22:29
Я так и понял, что это размер, не много не правильно сформулировал,
получился как бы вопрос, ;-)

Ответить

Страница: 1 |

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



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