Страницы: 1
RSS
Бинарный файл
 
Есть бинарный файл, содержащий данные в формате Float32, как обработать этот файл макросом и вставить данные из него в таблицу
 
Считать из файла конкретные 4 байта данных в VBA-переменную типа Long, и так для всех данных
 
{quote}{login=:)}{date=06.10.2008 07:17}{thema=}{post}Считать из файла конкретные 4 байта данных в VBA-переменную типа Long, и так для всех данных{/post}{/quote}  
 
А пример можно?
 
{quote}{login=Martinz}{date=06.10.2008 07:27}{thema=Re: }{post}{quote}{login=:)}{date=06.10.2008 07:17}{thema=}{post}Считать из файла конкретные 4 байта данных в VBA-переменную типа Long, и так для всех данных{/post}{/quote}  
А пример можно?{/post}{/quote}  
 
Sub ВотТакВсегда_МожноПример_и_ЕщеФайлДляПримераВыдумай()  
   Dim v(1 To 10) As Long, x, i  
   ' Зададим Long-массив  
   For i = 1 To 10  
       v(i) = i * 10  
   Next  
   ' Запишем Long-массив в файл,  
   ' размер файла получится: 4Байта * 10чисел = 40Байт  
   Open ThisWorkbook.Path & Application.PathSeparator & "Float32.bin" For Binary As #1  
   Put #1, , v  
   Close #1  
   ' Обнулим все элементы массива  
   Erase v  
   ' Если не верим Erase-у, то испоганим еще 10-й элемент массива  
   v(10) = -1  
   ' Считаем из файла весь массив (то, о чем, собственно, спрашивалось)  
   Open ThisWorkbook.Path & Application.PathSeparator & "Float32.bin" For Binary As #1  
   Get #1, , v  
   Close #1  
   ' Очистим [A1:A10]
   [A1:A10].ClearContents
   ' Запишем считанный из файла массив в [A1:A10]
   [A1:A10].Value = Application.WorksheetFunction.Transpose(v)
End Sub
 
{quote}{login=:)}{date=06.10.2008 11:30}{thema=Re: Re: }{post}{quote}{login=Martinz}{date=06.10.2008 07:27}{thema=Re: }{post}{quote}{login=:)}{date=06.10.2008 07:17}{thema=}{post}Считать из файла конкретные 4 байта данных в VBA-переменную типа Long, и так для всех данных{/post}{/quote}  
А пример можно?{/post}{/quote}  
 
Sub ВотТакВсегда_МожноПример_и_ЕщеФайлДляПримераВыдумай()  
   Dim v(1 To 10) As Long, x, i  
   ' Зададим Long-массив  
   For i = 1 To 10  
       v(i) = i * 10  
   Next  
   ' Запишем Long-массив в файл,  
   ' размер файла получится: 4Байта * 10чисел = 40Байт  
   Open ThisWorkbook.Path & Application.PathSeparator & "Float32.bin" For Binary As #1  
   Put #1, , v  
   Close #1  
   ' Обнулим все элементы массива  
   Erase v  
   ' Если не верим Erase-у, то испоганим еще 10-й элемент массива  
   v(10) = -1  
   ' Считаем из файла весь массив (то, о чем, собственно, спрашивалось)  
   Open ThisWorkbook.Path & Application.PathSeparator & "Float32.bin" For Binary As #1  
   Get #1, , v  
   Close #1  
   ' Очистим [A1:A10]
   [A1:A10].ClearContents
   ' Запишем считанный из файла массив в [A1:A10]
   [A1:A10].Value = Application.WorksheetFunction.Transpose(v)
End Sub{/post}{/quote}  
 
С этим разобрался :о) А если не известно конкретно сколько записей в ячейке и нужно все данные считать из файла и внести их в ячейки
 
А файл большой, порядка 4-х мегабайт
 
Не объявляйте конкретный размер массива.  
Dim v() As Long  
либо узнайте размер файла  
FileLen(ThisWorkbook.Path & Application.PathSeparator & "Float32.bin")
 
{quote}{login=Лузер™}{date=07.10.2008 08:50}{thema=}{post}Не объявляйте конкретный размер массива.  
Dim v() As Long  
либо узнайте размер файла  
FileLen(ThisWorkbook.Path & Application.PathSeparator & "Float32.bin"){/post}{/quote}  
Все правильно, если разделить размер файла на 4, то получим количество элементов массива. После этого Redim() и т.д.
 
Всем спасибо за участие, все оказалось на много проще :о)
Страницы: 1
Наверх