Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - [решено] сохранить элементы массива и потом загрузить обратно

Ответить
Настройки темы
VBA - [решено] сохранить элементы массива и потом загрузить обратно

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


помогите разобраться с прогой, есть две формы связанные одним глобальным массивом, так вот на одной форме мы к примеру в текстбоксах пишем некие суммы и надо чтоб это сохранялось в массив потом при новом запуске проги, вторая форма уже использовала этот сохраненный массив

Отправлено: 15:31, 02-02-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Пишете в файл. При запуске ищете этот файл и загружаете из него данные.

Отправлено: 16:48, 02-02-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


я тут по искал в инете http://www.cyberforum.ru/vb-net/thread1233719.html, сохраняет в файл, но вот почему то не получается сохранить данные типа double

Отправлено: 17:03, 02-02-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


matyash, у Вас VB, VBA или VB.Net? Массив содержит данные одного типа или нескольких?

Отправлено: 17:23, 02-02-2015 | #4


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


VB.Net одного Double

Отправлено: 17:50, 02-02-2015 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Можете, например, попробовать так:
Скрытый текст
Код: Выделить весь код
Imports System.IO

Module Module1
    Sub Main()
        Dim aArrayOfDoubles() = New Double() {1, 2, 3, 4, 5}
        Dim elem As Double

        Dim sSourceFile As String = "c:\MyArray.bin"
        Dim oFileStream As New System.IO.FileStream(sSourceFile, IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
        Dim oBinaryWriter As New System.IO.BinaryWriter(oFileStream)

        For Each elem In aArrayOfDoubles
            oBinaryWriter.Write(elem)
        Next

        oBinaryWriter.Close()
        oFileStream.Close()



        Dim oFileStream2 As New System.IO.FileStream(sSourceFile, IO.FileMode.Open, IO.FileAccess.Read)
        Dim oBinaryReader As New System.IO.BinaryReader(oFileStream2)

        Try
            Do
                Console.WriteLine(oBinaryReader.ReadDouble())
            Loop
        Catch ex As EndOfStreamException
            ' Nothing to do
        Finally
            oBinaryReader.Close()
        End Try

        oFileStream2.Close()
    End Sub
End Module

Первая часть кода сохраняет значения массива double() в файл, вторая — читает значения double из файла.

Отправлено: 23:05, 02-02-2015 | #6


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 20:55, 03-02-2015 | #7


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


не выходит:
у меня массив public:

вот форма 1

Код: Выделить весь код
Public Class Form1
    Dim sum As Double

    Private Sub Button40_Click(sender As Object, e As EventArgs) Handles Button40.Click
        Form2.Show()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        TextBox1.Text = TextBox1.Text & "мясной - " & Convert.ToString(costs(1)) & vbCrLf
        sum = sum + costs(1)
        TextBox2.Text = Convert.ToString(sum)
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TextBox1.Text = TextBox1.Text & "элегия - " & Convert.ToString(costs(0)) & vbCrLf
        sum = sum + costs(0)
        TextBox2.Text = Convert.ToString(sum)
    End Sub

    Private Sub Button39_Click(sender As Object, e As EventArgs) Handles Button39.Click
        TextBox1.Clear()
        TextBox2.Clear()
        sum = 0
    End Sub

модуль

Код: Выделить весь код
Module Module1
    Public costs() As Double = {12, 23}

End Module


форма 2


Код: Выделить весь код
 Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
        If TextBox2.Text <> "" Then
            costs(1) = Convert.ToDouble(TextBox2.Text)
        Else
            costs(1) = costs(1)
        End If
    End Sub
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        If TextBox1.Text <> "" Then
            costs(0) = Convert.ToDouble(TextBox1.Text)
        Else
            costs(0) = costs(0)
        End If

Последний раз редактировалось Drongo, 05-02-2015 в 19:42. Причина: #


Отправлено: 21:24, 03-02-2015 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата matyash:
можно закомментировать данный код »
Скрытый текст
Код: Выделить весь код
' Импортируем библиотеку
Imports System.IO

Module Module1
    Sub Main()
        ' Первая часть марлезонского балета
        
        ' Создаём массив типа Double из пяти элементов
        Dim aArrayOfDoubles() = New Double() {1, 2, 3, 4, 5}
        ' Переменная того же типа
        Dim elem As Double

        ' Путь к целевому файлу
        Dim sSourceFile As String = "c:\MyArray.bin"
        ' Открываем файловый поток для вышеуказанного файла
        Dim oFileStream As New System.IO.FileStream(sSourceFile, IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
        ' Создаём объект для двоичной записи в вышеприведённый поток
        Dim oBinaryWriter As New System.IO.BinaryWriter(oFileStream)

        ' Для каждого элемента массива...
        For Each elem In aArrayOfDoubles
            ' ...выполняем запись его значения в поток
            oBinaryWriter.Write(elem)
        Next

        ' Закрываем объект
        oBinaryWriter.Close()
        ' Закрываем поток
        oFileStream.Close()
        ' На этом первая часть завершена - данные из массива записаны в файл.
        ' Длина файла - размер массива*8 байт.


        ' Вторая часть марлезонского балета

        ' Открываем файловый поток для вышеуказанного файла
        Dim oFileStream2 As New System.IO.FileStream(sSourceFile, IO.FileMode.Open, IO.FileAccess.Read)
        ' Создаём объект для двоичной записи в вышеприведённый поток
        Dim oBinaryReader As New System.IO.BinaryReader(oFileStream2)

        ' Пытаемся...
        Try
            Do
                ' ...читать из файла по одному значению типа Double (по восемь байт)...
                Console.WriteLine(oBinaryReader.ReadDouble())
            Loop ' ...в бесконечном цикле
        ' ...как только попытаемся читать за концом файла - попадём сюда...
        Catch ex As EndOfStreamException
            ' Nothing to do
        ' ... и, наконец, сюда
        Finally
            ' Закрываем объект
            oBinaryReader.Close()
        End Try
        
        ' Закрываем поток
        oFileStream2.Close()
    End Sub
End Module

Замечания:
  • Я в коде при чтении просто вывожу прочитанные значения на консоль. Вы же можете использовать их по назначению — заполнять массив, сразу заполнять значения полей форме и т.п., что именно Вам потребно.
  • Я в коде продемонстрировал подход, когда мы заранее рассчитываем количество данных, которые будут считаны из в файла. Вы можете использовать иную, старую добрую C-шную технику: получить размер файла в байтах, разделить его на размер в байтах типа «Double()», получив количество сохранённых в нём отдельных данных. Затем просто прочитать уже известное количество данных по «for i=0 to «количество сохранённых в нём отдельных данных» - 1 : ….ReadDouble() : next».

Последний раз редактировалось Iska, 05-02-2015 в 13:16. Причина: Исправлена описка: «запонять» → «заполнять»

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:08, 04-02-2015 | #9


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


спасибо вам

Отправлено: 08:43, 05-02-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - [решено] сохранить элементы массива и потом загрузить обратно

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - как мне превратить флеху в локальный диск(флеха kingmax 4gb,)а потом обратно. fipati100 Накопители (SSD, HDD, USB Flash) 0 22-01-2015 15:12
Разное - Все программы перестали выполнять команды: Открыть, сохранить, сохранить как. KvadraNT Microsoft Windows 7 9 11-12-2012 12:32
[решено] Как присвоить элементы массива в "перетасованном" виде другому массиву? evg64 AutoIt 3 27-09-2009 14:09
Разное - из SP2 в SP1 а потом обратно 35house Microsoft Windows Vista 9 19-07-2009 19:22
Доступ - [решено] Растёт время отклика от сервера, потом он недоступен, а потом снова нормальный пинг Lesta Microsoft Windows 2000/XP 9 19-06-2009 13:38




 
Переход