Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.016 c
1-78961
td
2003-11-11 23:53
2003.11.24
OpenDialog


14-79132
aclon
2003-11-01 09:41
2003.11.24
появились на экране тёмные и светлыеполосы


3-78786
kasa
2003-11-05 18:42
2003.11.24
Insert


1-78941
jack128
2003-11-12 11:05
2003.11.24
Invalid Pointer Operation


6-79100
Tommy
2003-09-26 11:17
2003.11.24
люди напишите где почитать как работать с Socketami в отдельном t





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский