Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: Сохранение текста из нескольких TextBox Добавлено: 08.10.04 20:43  

Автор вопроса:  Unheilig | Web-сайт: www.tarjaturunen.narod.ru | ICQ: 336859855 
Здравствуйте.
У меня есть форма, на ней размещены 7 текстбоксов. В 1 текстбокс я обязательно пишу какой-либо текст, и в другие по выбору (к примеру текст будет только в 2 из 6 оставшихся), мне нужно чтобы все введеные данные сохранялись в один файл в таком порядке:

Текст 1 бокса

[1] - здесь текст из 2 бокса

[2] - здесь 3 и так далее...

Подскажите как это реализовать, ил дайте пример, ссылку

Ответить

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

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



Вопросов: 34
Ответов: 63
 Профиль | | #1 Добавлено: 08.10.04 22:46
переменная=text1.text+CHR(13)+CHR(10)+text2.text+CHR(13)+CHR(10)+text3.text+CHR(13)+CHR(10)...
И сохраняеш переменную в файл последовательного доступа.

Ответить

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



ICQ: 336859855 

Вопросов: 9
Ответов: 32
 Web-сайт: www.tarjaturunen.narod.ru
 Профиль | | #2
Добавлено: 09.10.04 01:06
Ладно, сохранять я научился. А как теперь открыть такой файл в том же порядке?

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 09.10.04 01:36
Сохранять:

Text1.Text & vbnullchar & Text2.Text

Загружать:

Text1.Text = Split(var, vbNullChar)(0)
Text2.Text = Split(var, vbNullChar)(1)

PS
И не надо использовать связку Chr(13) & Chr(10) = vbCrLf, т.к. это знак перехода на след. строку и перевода каретки в начало, что вполне можно набрать в текстовом поле, а значит после будет невозможно верно загрузить информацию обратно!

Ответить

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



ICQ: 336859855 

Вопросов: 9
Ответов: 32
 Web-сайт: www.tarjaturunen.narod.ru
 Профиль | | #4
Добавлено: 09.10.04 02:21
to sne:

А поподробнее можно. Ведь мне нужно именно так:

В первом боксе идёт вопрос (Q), а в других варианты ответов.

А выглядит файл так:
[Q] My questuion: snow is white?

[1] Yes

[2] No

[3] Sorry, i am daltonic :\

[4] Something...

Вот так...

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 09.10.04 02:27
Подробнее, куда уж... Лучше скажи что не ясно, тебе тут с радостью все помогут :))

Ответить

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



ICQ: 336859855 

Вопросов: 9
Ответов: 32
 Web-сайт: www.tarjaturunen.narod.ru
 Профиль | | #6
Добавлено: 09.10.04 02:51
to Всем кто заглянет в топик
Ну к примеру зачем этот vbnullchar? Я без него пробовал вот так :

Private Sub mnuSave_Click()
alltext = "Q " & Text1.Text + Chr(13) + Chr(10) + "[1] " & Text2.Text + Chr(13) + Chr(10) + "[2] " & Text3.Text + Chr(13) + Chr(10) + "[3] " & Text4.Text + Chr(13) + Chr(10) + "[4] " & Text5.Text + Chr(13) + Chr(10) + "[5] " & Text6.Text + Chr(13) + Chr(10) + "[6] " & Text7.Text + Chr(13) + Chr(10)
nFreeFile = FreeFile
CommonDialog.ShowSave
strFileName = CommonDialog.FileName
If strFileName <> "" Then
Open strFileName For Output As nFreeFile
Print #nFreeFile, alltext
Close
End If
End Sub

Всё сохраняет корректно, а мне так и надо, чтобы с новой строки было. Вот только открыть обратно не выходит. Напишите если не трудно.

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 09.10.04 03:02
я те про че и говорю, сделай все то же самое, но Chr(13) + Chr(10) замени на vbNullChar !!!

Ответить

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



ICQ: 336859855 

Вопросов: 9
Ответов: 32
 Web-сайт: www.tarjaturunen.narod.ru
 Профиль | | #8
Добавлено: 09.10.04 03:23
Я заменяю, но сохраняется всё в одну строку!!!
а мне надо столбец

Напиши всё это кодом на ВБ (сохр. и загр.)раз ты лучше знаешь!

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 09.10.04 03:49

Dim a As string, Lines() As String
Open FileName For Binary As 1
 a=Space$(Lof(1))
 Get #1,1,a
Close 1
Lines()=Split(a, VbCrLf)

 В результате в массив a загрузятся все твои строки. По одной на элемент массива.

Ответить

Номер ответа: 10
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #10 Добавлено: 09.10.04 05:09
А мне кажется лучше использовать файл произвольного доступа.
Private Type TestDB
Question as String * 100
FirstAnswer As String * 100
SecondAnswer As String * 100
ThridAnswer As string * 100
CorrectAnswer As String * 100
End Type
Когда получаешь вопросы и ответы из файла их можно поместить в массив Dim aTest() as TestDB. Так перед отображением их можно будет «случайно перетасовать», что бы каждый раз они выводились в разном порядке. А еще лучше использовать для этого базу данных.

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 09.10.04 08:08
Ну так напиши ему пример. Видишь он вообще с файлами работать не умеет.

Ответить

Номер ответа: 12
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #12 Добавлено: 09.10.04 09:35
    Private Type TestDB
        Question As String * 100
        FirstAnswer As String * 100
        SecondAnswer As String * 100
        ThridAnswer As String * 100
        CorrectAnswer As String * 100
    End Type
    ;Dim Test As TestDB
    ;Dim aTest() As TestDB

Private Sub cmdGetInformation_Click()
    ;Dim i As Integer
    ;Dim FileNum As Integer
    ;Dim FileName As String
    ;Dim RecCount As Integer
    ;Dim RecordLen As Long
    FileNum = FreeFile
    FileName = App.Path & "\TestDB.dat"
    RecordLen = Len(Test)
    'получаем длину записи
    RecCount = FileLen(FileName) / RecordLen
    'получаем количество записей
    Open FileName For Random As FileNum Len = RecordLen
    'открываем файл для произвольного доступа чтение/запись
    For i = 1 To RecCount
        Get #FileNum, i, aTest(UBound(aTest))
        'получаем запись № i, помещаем её в массив
        ReDim Preserve aTest(0 To UBound(aTest) + 1)
        'увеличиваем размерность массива сохраняя его содержимое
    Next i
    Close #FileNum
    'после этого можно поместить содержимое массива в текстовые поля
    'txtQuestion.Test = Trim(aTest(1).Question)
    'не забывай про Trim, нужно убрать лишние пробелы
End Sub

Private Sub cmdPutInformation_Click()
    ;Dim FileNum As Integer
    ;Dim FileName As String
    ;Dim RecCount As Integer
    ;Dim RecordLen As Long
    FileNum = FreeFile
    FileName = App.Path & "\TestDB.dat"
    RecordLen = Len(Test)
    'получаем длину записи
    If Dir(App.Path & "\TestDB.dat";) = "TestDB.dat" Then
        RecCount = FileLen(FileName) / RecordLen
        'получаем количество записей
    Else
        RecCount = 0
    End If
    Open FileName For Random As FileNum Len = RecordLen
    'открываем файл для произвольного доступа чтение/запись
    Put #FileNum, RecCount + 1, Test
    'записываем данные из структуры Test
    Close #FileNum
End Sub

Private Sub Form_Load()
    ReDim aTest(0)
    'вместо того, что ниже, кинь на форму текстовые поля например
    'txtQuestion, txtFirstAnswer, при нажатии на кнопку cmdPutInformation (скажем Сохранить)
    'из соответсвующих текстовый полей заноси информацию в структуру Test, например
    'Test.Question=txtQuestion.Text или Test.FirstAnswer=txtFirstAnswer.Text
    With Test
        .Question = "Первый вопрос"
        .FirstAnswer = "первый вариант ответа для 1 вопроса"
        .SecondAnswer = "второй вариант ответа для 1 вопроса"
        .ThridAnswer = "третий вариант ответа для 1 вопроса"
        .CorrectAnswer = "правильный ответ для 1 вопроса"
    End With
End Sub

Хотя конечно при таком варианте можно обойтись и без использования массива. Для случайного выбора вопроса можно сделать так:

Private Sub cmdNextQuestion_Click()
    ;Dim FileNum As Integer
    ;Dim FileName As String
    ;Dim CurrRec As Integer
    ;Dim RecordLen As Long
    FileNum = FreeFile
    FileName = App.Path & "\TestDB.dat"
    RecordLen = Len(Test)
    'получаем длину записи
    Randomize
    CurrRec = Int(Rnd * (FileLen(FileName) / RecordLen)) + 1
    ‘ случайным образом выбираем запись из файла
    Open FileName For Random As FileNum Len = RecordLen
    'открываем файл для произвольного доступа чтение/запись
    Get #FileNum, CurrRec, Test
    'получаем запись № i, помещаем её в массив
    Close #FileNum
End Sub

Правда в этом случае придется отслеживать был или нет уже этот вопрос. Если решишь работать с массивом, то перемешать его можно так:

    ;Dim atemp(0 To 1) As testdb
    SeconCount = Second(Time)
    For i = 1 To SeconCount * 300
        Randomize
        Ind = Int(Rnd * (UBound(aTest)))
        If Ind >= 0 Then
             If Ind Mod 2 = 0 Then
                 atemp(0) = aTest(Ind)
                 atemp(1) = aTest(UBound(aQuestion))
                 aTest(Ind) = atemp(1)
                 aTest(UBound(aTest)) = atemp(0)
             Else
                 atemp(0) = aTest(Ind)
                 atemp(1) = aTest(0)
                 aTest(Ind) = atemp(1)
                 aTest(0) = atemp(0)
            End If
       End If
    Next i

 И еще, думаю лучше будет создать два файла, для вопросов и для вариантов ответов, тогда можно будет перемешивать еще и варианты ответов.

З.Ы. Если что то не понятно, или я что то наколбасил, напиши… Надеюсь помого!

Ответить

Номер ответа: 13
Автор ответа:
 Tigre



Вопросов: 34
Ответов: 63
 Профиль | | #13 Добавлено: 09.10.04 20:51
   А не проше всё таки использовать Chr(13) + Chr(10)
   А открывать так:

Dim stroka(5) as string
Open "TESTFILE" For Input As #1
  'С каждым повторение цикла будет считываться следующая.
  For i=1 to 5
    Line Input #1, stroka(i)
  Next i
Close #1
text1 = stroka(1)
text2 = stroka(2)
text3 = stroka(3)
text4 = stroka(4)
text5 = stroka(5)

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #14
Добавлено: 10.10.04 01:05
А если в вопросах/ответах используется много строк???

Tigre, че ты так привезался к vbCrLf ??? Это же заведомо неверно!!!

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #15
Добавлено: 10.10.04 01:07
Это смотря какая задача перед тобой стоит.
 Например твой вариант выигрывает в скорости написания кода, но эффективен только на маленьких файлах (до 100 кБ); мой вариант мгновенно загружает боьлшие файлы, но сильно расходует память; а код Mihalыch'а нечто среднее между моим и твоим. Можно объединить все три способа, но для этого нужно иметь хорошие знания языка и устройства ЭВМ. Новичку это будет не под силу.

 Сейчас попробую это сделать :)

Ответить

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

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



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