Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Внизкак прочитать Найти похожие ветки
← →
Torus (2003-11-12 20:10) [0]Привет ребята, помогите пожалуста.
Есть нетипизированный файл, первые 8 байт опускаем(т.е. они не нужны), а вот идущие далее 4 байта типа Float мне нужно прочитать в Edit1.Text. Подскажите как правильно это сделать(желательно кодом).
Я только недавно изучаю Делфи, вот что я накуралесил(правда это я пытался считать первые 4 байта)
var
F1:file;
F2:Real;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
AssignFile(F1, OpenDialog1.FileName);
Reset(F1, 4);
BlockRead(F1, F2, 4);
Edit1.Text:=FloatToStr(F2);
напишите пожалуста если не влом...
← →
Palladin (2003-11-12 20:14) [1]читай внимательней справку по Reset
особенно по второму параметру
+
про процедуру Seek
← →
Torus (2003-11-12 20:21) [2]А я правильно обьявил F2? т.е. тип Float обьявляется как Real?
сорри за тупой вопрос, я новичок...
← →
Torus (2003-11-12 20:38) [3]немного переделал, но все равно выходит что-то не то, при просмотре хексом этих 4 байт число Float равно 25.452995 а в проге вылазиет -4,2275027822715E-9 в чем ошибка?
вот код...
var
F1:file;
F2:Real;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
AssignFile(F1, OpenDialog1.FileName);
Reset(F1, 12);
Seek(F1, 8);
BlockRead(F1, F2, 4);
Edit1.Text:=FloatToStr(F2);
end
← →
PlaZZma (2003-11-12 22:57) [4]//Torus
ты делай
Reset(F1, 4);
Seek(F1, 8);
BlockRead(F1, F2, 1);
← →
sniknik (2003-11-12 23:41) [5]Torus (12.11.03 20:38) [3]
еще смотря как пишется, возможно придется старшие и младшие байты местами менять.
кстати тип Real в моем дельфи 8 байт длинной, или 6 при соответствуюших директивах компилятора, 4 это Single.
← →
Германн (2003-11-13 03:08) [6]2 sniknik © (12.11.03 23:41)
Может и придется, а может и нет. Но для начала следует еще раз обратить внимание автора сабжа на:
Palladin © (12.11.03 20:14) [1]
читай внимательней справку по Reset
особенно по второму параметру
Еще более это относится к Torus!!!
Поскольку запись:
Reset(F1, 12);
Seek(F1, 8);
BlockRead(F1, F2, 4);
вообще не имеет смысла в рамках сабжа!
← →
Anatoly Podgoretsky (2003-11-13 06:41) [7]http://www.delphikingdom.com/lyceum/seminar.asp?partID=4
← →
AbrosimovA (2003-11-13 16:19) [8]Попробуй прописать ещё директиву {$Align off}
← →
Anatoly Podgoretsky (2003-11-13 16:51) [9]sniknik © (12.11.03 23:41) [5]
Важное хамечание, продолжим далее
type
Real := string;
или
Real := Integer;
← →
Torus (2003-11-13 18:42) [10]Спасибо мастера почитал ваши советы и статейки и у меня все получилось с открытием, но вот беда: никак не думал что запорюсь на сохранинии оного...вот суть проблемы:
Открываем файл, считываем в 9 едитов первые 36 байт(по 4 байта на эдит)(да еще одно примечание: файл не ограничивается этими 36 байтами, далее идет еще разная инфа), изменяем в эдитах значение(я менял циферку 2 на 3 :)), и затем сохраняем, но вместо того чтобы все правильно сохранить прога забивает те первые 36 байт значениями из 3-й записи(запись 4 байта), и никак не могу догнать как по человечески открыть(уже готово), изменить(ну тут понятно) и правильно сохранить, чтобы изменялись только те значения которые были открыты(т.е. те первые 36 байт) а идущие далее записи не изменялись, а вот и мой код, только плиз сильно не пинайте я ведь новичок в этом деле
type
TNote = record
Tim1:Single;
Tim2:Single;
KopX:Single;
KopY:Single;
KopZ:Single;
Kvt1:Single;
Kvt2:Single;
Kvt3:Single;
Kvt4:Single;
end;
var
F1:file;
KR:TNote;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
AssignFile(F1, OpenDialog1.FileName);
Reset(F1, 4);
BlockRead(F1, KR, 9);
Edit8.Text:=FloatToStr(KR.Tim1);
Edit9.Text:=FloatToStr(KR.Tim2);
Edit1.Text:=FloatToStr(KR.KopX);
Edit2.Text:=FloatToStr(KR.KopY);
Edit3.Text:=FloatToStr(KR.KopZ);
Edit4.Text:=FloatToStr(KR.Kvt1);
Edit5.Text:=FloatToStr(KR.Kvt2);
Edit6.Text:=FloatToStr(KR.Kvt3);
Edit7.Text:=FloatToStr(KR.Kvt4);
CloseFile(F1);
end
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
AssignFile(F1, OpenDialog1.FileName);
Reset(F1, 4);
KR.Tim1:=StrToFloat(Edit1.Text);
KR.Tim2:=StrToFloat(Edit1.Text);
KR.KopX:=StrToFloat(Edit1.Text);
KR.KopY:=StrToFloat(Edit1.Text);
KR.KopZ:=StrToFloat(Edit1.Text);
KR.Kvt1:=StrToFloat(Edit1.Text);
KR.Kvt2:=StrToFloat(Edit1.Text);
KR.Kvt3:=StrToFloat(Edit1.Text);
KR.Kvt4:=StrToFloat(Edit1.Text);
BlockWrite(F1, KR, 9);
CloseFile(F1);
end
Помогите пожалуста разобраться, буду очень благодарен
← →
willys (2003-11-13 19:44) [11]может, всё дело в том, что ты везде используешь Edit 1? :)
← →
Torus (2003-11-13 20:33) [12]гм...щет, и правда, вроде как теперь все окей :)
сорри за тупость :))) неуглядел
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c