![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте уважаемые знатоки. Делаю программу для диплома ( в универе паскаль учили да и все) и столкнулся с трудностями. Есть рабочая программа на паскале, ее нужно переделать в делфи.
Суть программы заключается в считывании данных из *.wav и работа с ними. Но на этапе считывания wav столкнулся с проблемами, делфи говорит о выходе за пределы. Часть программы на паскале, где считывается .wav Код:
(var datafile : file of byte )
Assign(DataFile,ss[kd]+mpp+'.wav');
Reset(DataFile);
seek(DataFile, 50);
AAs[0]:=0;
for i:=1 to k do
A[i]:=0;
for jj:=1 to jjk do
begin
for i := 1 to 4096 do
begin
Read(DataFile, Xx);
X^[i]:=xx/1;
end;моя попытка в делфи: Код:
AssignFile(DataFile,ss[kd]+mpp+'.wav');
Reset(DataFile, 1);
AAs[0]:=0;
for i:=1 to k do
A[i]:=0;
seek(DataFile, 50);
for i:=1 to 4096 do
begin
blockread(Datafile,buf,1);
X^[i]:=buf;
end;Если кто может, огромная просьба помочь. Выскакивает ошибка на blockread(Datafile,buf,1); Read beyond end of file. Вроде бы как выходит за пределы. исправить не получается... Последний раз редактировалось lmikle, 14.03.2012 в 02:04. |
|
#2
|
||||
|
||||
|
Для начала заключи приведённый код в тег , затем приведи переменные которые используешь. При указанной переменной DataFile, нужно писать Reset(DataFile).
Если используется переменная DataFile того типа как сейчас приведена, то нужно испольбзовать Read. P.S. Как читал в старом добром Паскале, также читаешь и сейчас. Последний раз редактировалось angvelem, 14.03.2012 в 00:43. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
deniks (14.03.2012)
| ||
|
#3
|
|||
|
|||
|
Код:
unit pribor56;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
type
mascp=array[1..4096] of single ;
mask=array[0..4096] of single ;
mascpptr=^mascp;
maskd=array [0..10] of string;
var
Form1: TForm1;
var xx: byte;
datafile : file of byte;
mpp:string;
kd:longint;
jj:integer;
sabb, sgarm, ss: maskd;
const jjk=2;{L=5;}n=12;pkr=100;fmax=11025/2;
var dt,a,f,xk:mask;
x,y:mascpptr;
i,j,k,L: integer;
implementation
{$R *.dfm}
begin
mpp:='1';
ss[kd]:='1w';
Assign(DataFile,ss[kd]+mpp+'.wav');
Reset(DataFile);
seek(DataFile, 50);
for i:=1 to k do
A[i]:=0;
for jj:=1 to jjk do
begin
for i := 1 to 4096 do
begin
Read(DataFile, Xx);
X^[i]:=xx/1;
end;end; end.lmikle: Дальше буду карать!!! дальше такого не будет, спс Последний раз редактировалось deniks, 14.03.2012 в 09:19. |
|
#4
|
|||
|
|||
|
на строке Read(DataFile, Xx); как бы читаем из .wav по байту
выбивает ошибку, поэтому думал по другому считать, к чему пришел в 1м посте, но ошибка из 1го места переместилась в другое. Последний раз редактировалось deniks, 14.03.2012 в 01:45. |
|
#5
|
||||
|
||||
|
Вы собираетесь пользоваться тегом [code]? Пока не исправите ответа не ждите.
|
|
#6
|
|||
|
|||
|
сори.. не знал ваших правил оформления. модер уже подправил
|
|
#7
|
|||
|
|||
|
Перед началом цикла
Код:
for i:=1 to k do А после implementation разве можно писать операторы? Операторы должны быть внутри функций / процерур. Т.е. ты неправильно перешёл от Паскаля к Delphi. Если приложение консольное, то оно похоже на Паскаль. Если обычное, оконное, то начало программы в файле .dpr, который обычно никто не трогает, а все пишут в unit'ах, в которых, как я написал, только описания и подпрограммы (то бишь все операторы внутри подпрограмм). Последний раз редактировалось AlexSku, 14.03.2012 в 10:56. |
| Этот пользователь сказал Спасибо AlexSku за это полезное сообщение: | ||
deniks (14.03.2012)
| ||
|
#8
|
|||
|
|||
|
это k можно убрать, не в нем проблема. Ругается при присваивании массиву значений, полученных из .wav. на строчке X^[i]:=xx/1;
Код:
unit pribor56;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
type
mascp=array[1..4096] of single ;
mask=array[0..4096] of single ;
mascpptr=^mascp;
maskd=array [0..10] of string;
var
Form1: TForm1;
var xx: byte;
datafile : file of byte;
mpp:string;
kd:longint;
jj:integer;
sabb, sgarm, ss: maskd;
const jjk=2;{L=5;}n=12;pkr=100;fmax=11025/2;
var dt,a,f,xk:mask;
x,y:mascpptr;
i,j,L: integer;
implementation
{$R *.dfm}
begin
mpp:='1';
ss[kd]:='1w';
Assign(DataFile,ss[kd]+mpp+'.wav');
Reset(DataFile);
seek(DataFile, 50);
for jj:=1 to jjk do
begin
for i := 1 to 4096 do
begin
Read(DataFile, Xx);
X^[i]:=xx/1;
end;end; end. |
|
#9
|
|||
|
|||
|
Какой смысл объяснять оператор, если после implementation их вообще не должно быть (начиная с begin)?
|
|
#10
|
||||
|
||||
|
Цитата:
![]() |
|
#11
|
|||
|
|||
|
почитаю как нужно оформлять программу в делфи, ошибка может быть из-за этого?
|
|
#12
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#13
|
|||
|
|||
|
x присваивается массив. непонял какой у него должен быть адрес
1 можно убрать, это связано с тестами программы на паскале. |
|
#14
|
||||
|
||||
|
Цитата:
|
|
#15
|
||||
|
||||
|
Сколько шума из ничего:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
F : File;
I, J : Integer;
XX : Byte;
begin
mpp := '1';
ss[kd] := '1w';
{$I-}
AssignFile(F, ss[kd] + mpp + '.wav');
Reset(F, 1);
if IOResult = 0 then
begin
Seek(F, 50);
for I := 1 to jjk do
for J := 1 to 4096 do
begin
BlockRead(F, XX, 1);
X[J] := XX;
end;
CloseFile(F);
end;
{$I+}
end;![]() |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
deniks (14.03.2012)
| ||