Страница: 1 |
Страница: 1 |
Вопрос: Помогите друзья
Добавлено: 15.02.08 14:09
Автор вопроса: Али
Задача такая в Visual Basic 2005 надо создать приложение которое считывает с файла разные цифровые данные и записывает в массив. Цифровые данные типа Double и Массив типа Double. Помогите
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 15.02.08 17:26
BinaryReader наверное проще всего.
Номер ответа: 2
Автор ответа:
xuser
Вопросов: 1
Ответов: 20
Профиль | | #2
Добавлено: 16.02.08 03:16
Жаль, BinaryReader рассчитывает, что размерность и количество элементов масива заведомо известно. А так можно записывать, читать и ненапрягацца.
ByVal e As System.EventArgs) Handles btnRead.Click
Dim resset As New Resources.ResourceSet("c:\doubles.dbl"
Dim doubles() As Double = resset.GetObject("doubles"
resset.Dispose() : resset.Close()
Dim d, dd As Double
For Each d In doubles : dd += d : Next
MsgBox(dd.ToString)
End Sub
Private Sub btnWrite_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnWrite.Click
Dim doubles() As Double = {3.5, 7.0, 10.5, 14.0, 17.5, 21.0}
Dim writer As New Resources.ResourceWriter("c:\doubles.dbl"
Call writer.AddResource("doubles", doubles)
Call writer.Generate() : writer.Dispose()
End Sub
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 16.02.08 04:06
А что мешает перед записью элементов массива записать его длину?
Номер ответа: 4
Автор ответа:
xuser
Вопросов: 1
Ответов: 20
Профиль | | #4
Добавлено: 16.02.08 05:09
Ничто не мешает! Но, вдруг, человеку надо нечто сделать как можно быстрее и иметь при этом наиболее простое решение (и более универсальное)?
А многомерный массив? Ведь для разработки такого формата уйдёт "некоторое" врямя, зависимо от задачи?!
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 16.02.08 05:33
Чтение/запись многомерного массива принципиальной сложностью по сравнению с одномерным массивом.
При использовании BinryReader/Writer скорость работы при любом раскладе будет намного больше чем при работе с ResourceReader/ResourceWriter. А результриующий размер файла - меньше чем при использовании ResourceWriter
Номер ответа: 6
Автор ответа:
xuser
Вопросов: 1
Ответов: 20
Профиль | | #6
Добавлено: 16.02.08 06:01
Я ничего против BinaryReader\Writer не имею и сам им успешно пользуюсь. Но говорю о быстром и простом решении, которое, возможно, хочется (или очень нужно) иметь под рукой.
Номер ответа: 7
Автор ответа:
Али
Вопросов: 2
Ответов: 2
Профиль | | #7
Добавлено: 21.02.08 09:25
Надо считывать с текстового файла и разпознать как число, и записывать надо тоже в текстовый файл.
Номер ответа: 8
Автор ответа:
xuser
Вопросов: 1
Ответов: 20
Профиль | | #8
Добавлено: 22.02.08 03:27
Private Sub btnRead_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnRead.Click
 im stream As New IO.FileStream("c:\doubles.txt", IO.FileMode.Open)
 im reader As New IO.BinaryReader(stream, System.Text.Encoding.ASCII)
 im count As Integer = reader.ReadInt32 ' Читаем количество элементов
 im doubles(count - 1) As Double ' Новый массив требуемой длины
 im d, dd As Double, i As Integer
For i = 0 To count - 1
' Читаем по 8 байт для каждого элемента, преобразовывая к Double
doubles(i) = BitConverter.ToDouble(reader.ReadBytes(8), 0)
Next
reader.Close() : stream.Close() ' Закрываемся
For Each d In doubles : dd += d : Next
MsgBox(dd.ToString)
End Sub
Private Sub btnWrite_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnWrite.Click
 im doubles() As Double = {3.5, 7.0, 10.5, 14.0, 17.5, 21.0}
 im stream As New IO.FileStream("c:\doubles.txt", IO.FileMode.OpenOrCreate)
 im writer As New IO.BinaryWriter(stream, System.Text.Encoding.ASCII)
Call writer.Write(doubles.Length) ' Int32 - 4 байта (сохраняем количество елементов)
' Записываем элементы массива как Double (8 байт на элемент)
 im i As Integer : For i = 0 To doubles.GetUpperBound(0) : writer.Write(doubles(i)) : Next
writer.Close() : stream.Close()
End Sub