Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
ВнизМассивы Найти похожие ветки
← →
alec_sey (2006-05-30 02:35) [0]Люди добоые подскажите почему возникает ошибка и как её исправить
С фиксированным массивом всё нормально а с динамическим почему то
ошибка и именно внутри другого цикла(ниже ошибка помечена)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, Gauges;
type
TForm1 = class(TForm)
Button1: TButton;
MaskEdit1: TMaskEdit;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
MaskEdit2: TMaskEdit;
Button2: TButton;
Button3: TButton;
MaskEdit3: TMaskEdit;
Label2: TLabel;
Label1: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
f1,f2:file;
b:array of integer;
fr,b1:array of integer;
implementation
uses Math;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
with OpenDialog1 do begin
if not execute then exit else
MaskEdit1.Text:=OpenDialog1.FileName;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
with SaveDialog1 do begin
if not execute then exit else
MaskEdit2.Text:=SaveDialog1.FileName;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
s:string;
j,x:integer;
begin
s:=MaskEdit3.Text;
SetLength(b,Length(s));
SetLength(b1,Length(s));
SetLength(fr,Length(s));
for j:=1 to Length(s) do
fr[j-1]:=strtoint(s[j]);
AssignFile(f1,MaskEdit1.Text);
AssignFile(f2,MaskEdit2.Text);
reset(f1);
Rewrite(f2);
while not Eof(f1) do
begin
BlockRead(f1,b,1);
for x:=1 to Length(s) do
b1[x-1]:=b[x-1] xor fr[x-1];// здесь ошибка
BlockWrite(f2,b1,1);
Label3.Caption:="Çàøèôðîâàí 37;î "+IntToStr(FileSize(f2))+" áàéò";
Application.ProcessMessages;
end;
end;
end.
← →
Rial © (2006-05-30 02:51) [1]fr[j-1]:=strtoint(s[j]);
Так ведь s[j] - это символ. Странная операция, хотя при наличии
хорошей погоды все будет нормально.
Мне не очень понятно, что происходит в программе.
Точнее понятно, что происходит, а вот что хотелось тебе - нет.
Опиши задачу, ее явно можно проще решить.
А главная ошибка вот:
BlockRead(f1,b,1);
и
BlockWrite(f2,b1,1);
b и b1 - это лишь указатели на динамически распределенную память.
Ты их изменяешь, и в результате указатели указывают черт знает куда ...
К тому же, SizeOf(Integer)=4, почему из файла читается по одному байту?
Надо объявить не Array of Integer,а Array of Byte;
Что, собственно, почти и есть строка ...
И читать надо хотябы так(читаем сразу весь массив):
N:=BlockRead(f1,Pointer(b)^,SizeOf(Byte)*Length(b));
BlockWrite(f1,Pointer(b1)^,SizeOf(Byte)*Length(b1));
N возвратит кол-во реально прочитанных байт.
Его и проверишь.
А по секрету говоря, Array of - это зло :)).
← →
alec_sey (2006-05-30 03:01) [2]s[j] это числа так что ничё тут такого нету, А вообше нужно считать блок
затем каждый I-й елемент блока xorom сопоставить с введённым I-м елементом числовой строки и записть его
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c