Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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 рассчитывает, что размерность и количество элементов масива заведомо известно. А так можно записывать, читать и ненапрягацца.

Private Sub btnRead_Click(ByVal sender As System.Object, _
   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
Жаль, BinaryReader рассчитывает, что размерность и количество элементов масива заведомо известно. А так можно записывать, читать и ненапрягацца.

А что мешает перед записью элементов массива записать его длину?

Ответить

Номер ответа: 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
   ;Dim stream As New IO.FileStream("c:\doubles.txt", IO.FileMode.Open)
   ;Dim reader As New IO.BinaryReader(stream, System.Text.Encoding.ASCII)
   ;Dim count As Integer = reader.ReadInt32 ' Читаем количество элементов
   ;Dim doubles(count - 1) As Double ' Новый массив требуемой длины
   ;Dim 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
   ;Dim doubles() As Double = {3.5, 7.0, 10.5, 14.0, 17.5, 21.0}
   ;Dim stream As New IO.FileStream("c:\doubles.txt", IO.FileMode.OpenOrCreate)
   ;Dim writer As New IO.BinaryWriter(stream, System.Text.Encoding.ASCII)
   Call writer.Write(doubles.Length) ' Int32 - 4 байта (сохраняем количество елементов)
   ' Записываем элементы массива как Double (8 байт на элемент)
   ;Dim i As Integer : For i = 0 To doubles.GetUpperBound(0) : writer.Write(doubles(i)) : Next
   writer.Close() : stream.Close()
End Sub

Ответить

Страница: 1 |

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



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