Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

как прочитать   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
3-78784
Islander
2003-11-05 15:25
2003.11.24
Как проверить данные перед посылкой в БД, работая через ADO


7-79189
di.ma2002@mail.ru
2003-09-01 06:23
2003.11.24
Разговор через модем


4-79226
Raki
2003-09-02 18:00
2003.11.24
Путь к приложению


6-79093
oduvan
2003-09-20 09:40
2003.11.24
Трабл!!! TWebBrowser (#bottom)


1-79040
viol-2
2003-11-13 11:39
2003.11.24
Загрузка программы