![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Тема : Ввод и вывод данных в потоках (TMemoryStream).
Вопрос такой: Считываем из потока: Код:
var SMin,SMout: TMemoryStream; m,s: Real; …. Begin …. SMin:= TMemoryStream.Create; SMout:= TMemoryStream.Create; SMin.LoadFromFile(AnsiString('c:\on\PROBA\in.txt')); SMin.Read(m,sizeOf(Real)); …. S:=m+1.00234; SMout.Write(m,sizeOf(Real)); SMout.SaveToFile('c:\on\PROBA\out.txt'); … End. В результате в файле все что угодно только не результаты вычисления( Тоже c данными в формате integer. Что делаю не правильно и как это исправить? И еще как из потока считать строку не по символам до #13, а целиком и сразу, если это возможно). Последний раз редактировалось Admin, 20.01.2012 в 15:12. |
#2
|
|||
|
|||
![]() Несколько странно выглядят эти строки
S:=m+1.00234; SMout.Write(m,sizeOf(Real)); Может быть все- таки так: Код:
S:=m+1.00234; SMout.Write(S,sizeOf(Real)); |
#3
|
||||
|
||||
![]() И ещё, может потребоваться использовать свойство Position.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#4
|
|||
|
|||
![]() Цитата:
![]() |
#5
|
|||
|
|||
![]() Если кто сталкивался с такой задачей, подскажите
![]() |
#6
|
||||
|
||||
![]() У меня вопрос (если задаю не там, извините, я только зарегистрировался).
Сделал несколько TStringList в разных unit'ах. С процедурой Add проблем нет - всё работает как надо. А вот Insert почему-то не хочет, выскакивает ошибка: "list index out of bounds (1)", и ещё Free тоже не работает и тоже выскакивает ошибка. Код:
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Label1: TLabel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); end; var Form2: TForm2; ts:TStringList; implementation uses unit1; procedure TForm2.Button2Click(Sender: TObject); begin //ts.Free; Close; end; procedure check; begin with Form2, unit1.Form1 do begin Label3.Visible:=CheckBox1.Checked; Label8.Visible:=CheckBox1.Checked; Label4.Visible:=CheckBox2.Checked; Label9.Visible:=CheckBox2.Checked; Label2.Visible:=CheckBox3.Checked; Label7.Visible:=CheckBox3.Checked; Label1.Visible:=CheckBox4.Checked; Label6.Visible:=CheckBox4.Checked; end; end; procedure TForm2.Button1Click(Sender: TObject); begin check; ts.Clear; ts.Add(BoolToStr(CheckBox1.Checked)); ts.Add(BoolToStr(CheckBox2.Checked)); ts.Add(BoolToStr(CheckBox3.Checked)); ts.Add(BoolToStr(CheckBox4.Checked)); ts.SaveToFile('Settings\Config.cfg'); //ts.Free; Form2.Close; end; procedure TForm2.FormCreate(Sender: TObject); begin ts:=TStringList.Create; if FileExists('Settings\Config.cfg')=false then Form2.Button1Click(Sender) else begin ts.LoadFromFile('Settings\Config.cfg'); CheckBox1.Checked:=StrToBool(ts.Strings[0]); CheckBox2.Checked:=StrToBool(ts.Strings[1]); CheckBox3.Checked:=StrToBool(ts.Strings[2]); CheckBox4.Checked:=StrToBool(ts.Strings[3]); Form2.Button1Click(Sender); end; end; end. Код:
unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm4 = class(TForm) LabeledEdit1: TLabeledEdit; LabeledEdit2: TLabeledEdit; LabeledEdit3: TLabeledEdit; Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); end; var Form4: TForm4; tar:TStringList; implementation procedure TForm4.Button2Click(Sender: TObject); begin Close; end; procedure TForm4.Button1Click(Sender: TObject); begin tar:=TStringList.Create; tar.Clear; if (LabeledEdit1.Text<>'') then tar.Insert(0,LabeledEdit1.Text); if (LabeledEdit2.Text<>'') then tar.Insert(1,LabeledEdit2.Text); if (LabeledEdit3.Text<>'') then tar.Insert(2,LabeledEdit3.Text); tar.SaveToFile('Settings\Tarif.cfg'); //tar.Free; end; end. Может быть, я и левша, но я всегда прав! Последний раз редактировалось R-18Rus, 08.04.2012 в 19:11. |
#7
|
||||
|
||||
![]() если не выполнилось первое условие, а StringList.Count==0, то при выполнении вставки в первую (или вторую) строку и вызывается ошибка.
может так лучше будет Код:
procedure TForm4.Button1Click(Sender: TObject); begin tar:=TStringList.Create; tar.Clear; if (LabeledEdit1.Text<>'') then tar.Insert((tar.Count-1),LabeledEdit1.Text); if (LabeledEdit2.Text<>'') then tar.Insert((tar.Count-1),LabeledEdit2.Text); if (LabeledEdit3.Text<>'') then tar.Insert((tar.Count-1),LabeledEdit3.Text); tar.SaveToFile('Settings\Tarif.cfg'); //tar.Free; end; и сделайте ts:TStringList локальной, все равно создаете и удаляете (не всегда) при каждом нажатии кнопки, тогда и с Free вопрос разрешится |
#8
|
||||
|
||||
![]() Цитата:
Ещё объясните, пожалуйста, вот это: tar.Count-1. Цитата:
|
#9
|
||||
|
||||
![]() c примером я погорячился, так тоже будут ошибки, используйте метод Add (так же, как и в Form2 по нажатию Button1)
Цитата:
да и вообще ознакомьтесь |
#10
|
||||
|
||||
![]() Да, пример я опробовал - те же лаги.
Цитата:
Что значит Count я знаю, почему Вы предлогаете Count-1? А ещё где тут может быть ошибка? Код:
procedure TForm1.N3Click(Sender: TObject); var proezd:TStringList; begin if OpenDialog1.Execute then begin Proezd:=TStringList.Create; proezd.LoadFromFile(OpenDialog1.FileName); Label6.Caption:=proezd.Strings[0]+' руб.'; Label7.Caption:=proezd.Strings[1]+' руб.'; Label8.Caption:=proezd.Strings[2]+' руб.'; Label9.Caption:=proezd.Strings[3]+' руб.'; end; end; procedure TForm1.N4Click(Sender: TObject); var proezd:TStringList; begin if SaveDialog1.Execute then begin Proezd:=TStringList.Create; proezd.Add(Label6.Caption); proezd.Add(Label7.Caption); proezd.Add(Label8.Caption); proezd.Add(Label9.Caption); proezd.SaveToFile(SaveDialog1.FileName); OpenDialog1.FileName:=SaveDialog1.FileName; end; end; P.S. Почему меня постоянно выкидывает из аккаунта на форуме? Порой, на страницу зайду - авторизован, куда-то перемещусь - уже не авторизован. Последний раз редактировалось R-18Rus, 09.04.2012 в 20:22. |