Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2012, 06:12   #1
УрбанСникерс
Пользователь
 
Регистрация: 08.10.2012
Сообщений: 14
По умолчанию Чтение заголовка файла

Всем привет! Столкнулся с проблемой чтения заголовка файла точнее с незнанием данной темы. Суть задачи в том чтобы вывести в excel путь и хронометраж файла, в формате m2p, до миллисекунд. Подскажите пожалуйста какие-нибудь источники.
УрбанСникерс вне форума Ответить с цитированием
Старый 07.11.2012, 10:30   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот это попробуйте:
http://excelvba.ru/code/MCI

Учитывая, что m2p - это видеофайл, должно сработать.
EducatedFool вне форума Ответить с цитированием
Старый 07.11.2012, 13:12   #3
УрбанСникерс
Пользователь
 
Регистрация: 08.10.2012
Сообщений: 14
По умолчанию

Спасибо!
с MCI не прокатило, а вот mediaplayer самое то! Хотя Delphi не хотел открывать. Но все равно интересует вопрос о заголовках, что да как.
УрбанСникерс вне форума Ответить с цитированием
Старый 09.11.2012, 09:52   #4
УрбанСникерс
Пользователь
 
Регистрация: 08.10.2012
Сообщений: 14
По умолчанию

К сожалению такой способ не подойдёт т.к. 1 файл надо ждать около 1 секунды, а если файлов много это вообще не вариант. Есть ли альтернатива?
УрбанСникерс вне форума Ответить с цитированием
Старый 09.11.2012, 10:40   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Есть ли альтернатива?
Да.
Изучаете бинарный формат файла, разбираетесь, как и где закодирована длительность, пытаетесь получить это значение.

Когда вы напишете этот код (мы тут вам не помощники, ибо это не имеет никакого отношения к Excel, и требует много времени) - вот тогда обращайтесь, сделать цикл по файлам и прикрутить к нему ваш код мы поможем.
EducatedFool вне форума Ответить с цитированием
Старый 09.11.2012, 11:37   #6
УрбанСникерс
Пользователь
 
Регистрация: 08.10.2012
Сообщений: 14
По умолчанию

Развлекуха на выходные обеспечена
УрбанСникерс вне форума Ответить с цитированием
Старый 09.11.2012, 12:06   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вот для примера.
так я втащил ВМР-файл в эксель.
все это космически далеко от идеала, но как пример, воплне...
идея была простая
1.уменьшаем ячейки ексель до небольшого размера
2.разбираем габариты файла
3.закрашиваем соотв. ячейку листа теми же цветами, что у соотв. пикселя картинки.
картинка для примера прилагается (это Лесь Подеревянский - художник, который более известен благодаря своим пьесам). скопируйте картинку на свой компьютер, запускайте InsPicture на чистом листе ексель.

а строго по Вашей проблеме - ищите техническое описание формата файла. Приведенная в данном примере функция ReadNB читает данные из файла по одному байту. Вам осталось определится по какому смещению сколько байт почитать.

Код:
Sub InsPicture()
Dim fn As String, W As Long, h As Long, w1 As Integer, dof As Long, bpp As Integer, sz As Long
Dim r As Long, p As Long, ln As Long, BMP As Boolean, bt As Byte
Dim rc As Byte, gc As Byte, bc As Byte
  With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Выбери файл, или откажись от этой затеи"
    .Filters.Add "BitMap", "*.bmp"
    .AllowMultiSelect = False
    If .Show = -1 Then fn = .SelectedItems(1) Else Exit Sub
  End With
  Open fn For Random As #1 Len = 1
    Get #1, 1, bt: BMP = bt = 66
    Get #1, 2, bt: If BMP Then BMP = bt = 77
  Close #1
  If Not BMP Then MsgBox "Закрываемся... Не BMP-файл.": Exit Sub
  bpp = ReadNB(fn, 2, 29)
  If bpp <> 24 Then MsgBox "Закрываемся... Конвертируйте ваш файл каким-нибудь графическим редактором в 24-битный имидж.": Exit Sub
  dof = 1 + ReadNB(fn, 4, 11)
  W = ReadNB(fn, 4, 19):  h = ReadNB(fn, 4, 23)
  If W > 256 Then MsgBox "Имидж очень большой. Нарисую часть. Принимается ширина до 256 пикселей. У экселя столько колонок:-(."
  Application.Calculation = xlManual
  Cells.Select:  Selection.ColumnWidth = 0.33:  Selection.RowHeight = 3
  If W > 255 Then w1 = 255 Else w1 = W
  ActiveWindow.DisplayGridlines = False
  Range(Cells(1, 1), Cells(h, w1)).Select: ActiveWindow.Zoom = True
  Cells(h + 1, 1).Select
  If (W * 3 Mod 4) = 0 Then ln = W * 3 Else ln = (Int(W * 3 / 4) + 1) * 4
  For r = 0 To h - 1
    For p = 0 To Int(ln / 3)
      rc = ReadNB(fn, 1, dof + r * ln + p * 3): gc = ReadNB(fn, 1, dof + r * ln + p * 3 + 1): bc = ReadNB(fn, 1, dof + r * ln + p * 3 + 2)
      If p = 256 Then Exit For
      If p < W Then Cells(h - r, p + 1).Interior.Color = RGB(rc, gc, bc)
    Next
  Next
  Application.Calculation = xlAutomatic
End Sub

Function ReadNB(s As String, N As Byte, of As Long) As Long
Dim b As Byte, i As Byte, r As Long
  Open s For Random As #1 Len = 1
    r = 0
    For i = 0 To N - 1
      Get #1, of + i, b
      r = r + b * 2 ^ (8 * i)
    Next
  Close #1
  ReadNB = r
End Function
Изображения
Тип файла: bmp 1.bmp (147.1 Кб, 132 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение заголовка файла Kukurudza Общие вопросы C/C++ 2 13.08.2012 12:59
чтение из файла JoBl Win Api 8 19.01.2012 20:30
чтение из файла. aschak Общие вопросы C/C++ 9 30.12.2008 15:24
Чтение из файла e@gle Общие вопросы Delphi 3 14.12.2008 17:21
чтение файла Arteom Общие вопросы Delphi 6 27.08.2007 18:15