Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Присваивание файловых переменных


Автор: EKoshelev 12.11.2004, 16:08
Вощем предыстория (или с буквой "И"?) следующая. Пишу дебильный объект по реализации конечного автомата. Этот автомат может содержать вложенные (дочерние, делегированные) автоматы (абс. идентичные ему же). Вот. Источником текстаря может быть TStrings, а может быть файл.
Предположим, что я работаю с файлом. Когда я передаю управление вложенному автомату нужно и файловую переменную ему закинуть (по скоку работать он будет с тем же текстом). Простым присваиванием, ессно, ничё не добьёшься - глюк на этапе компиляции. Ещё мне на мгновение показалось, что можно у одного файла сделать FilePos, а у другого Seek. С филепозом получилось, а на сике мне сказали, что с текстовыми файлами такая фича не прокатывает.
Можно параметром перекинуть через какую-ньть процедурь, типа:

Код

procedure VlozhAvtomat.fignya(var f: textfile);
begin
  {а дальше фиг его знает}
end;


А дальше фиг его знает.
Есть ещё дебильный вариант. Создать там дополнительный textfile и пролистать его до того же места, но по-моему это слишком некрасиво (Да и потом будет ли он работать с тем же файлом? А ещё я слышал, что одновременно в приложении может быть ограниченное число файловых переменных (или меня дезинформировали???)). Короче, путь фиговый какой-то. Можно просто закидать всё в TStrings и с ним работать, но если текстарь будет слишком большим, то тоже отстой получится.

Одним словом говоря, я в смятении. smile
Подкиньте идейку плииииз.

Автор: Vit 12.11.2004, 16:41
Используй потоки - TFileStream

Автор: p0s0l 12.11.2004, 17:46
Насколько большим может быть файл ? Оптимальный вариант - засунуть в TStringList... Иначе, если работать с потоками и с нетекстовыми файлами, будет неудобно выцеплять строки, хотя это уже будет универсальный способ...

PS: а что автомат может читать только в одном направлении (т.е. назад не возвращается) ?

Автор: EKoshelev 15.11.2004, 13:59
Vit
Я не умею. Может научишь? Или наколочку какую-нить кинешь где написано?


p0s0l
Вообще-то я собирался только в одном направлении читать. Я чё-то где-то читал, что там (в TStirngs'e) может поместится только 64 кг. И то с какими-то половыми извращениями. Просто у меня привычка такая (какой же я, блин, крутой), что всё время пытаюсь так, чтобы работало с чем угодно. То есть, вообще-то я пишу без расчёта на юзание файлов, но в перспективе очень даже не исключено, что эта фишка пригодится.

Я вот тут придумал одно извращеньице. Сделал объект с полем типа файла. И стал присваивать. В общем, не вижу причин для глюков при таком подходе. Как вы считаете (Vit и p0s0l) это очень дебильный подход или сойдёт по пьяни?

Ну, короче, спасибо вам господа, что не отказали в помощи, может ещё ответите на мои вопросы . smile

Автор: Vit 15.11.2004, 16:45
Цитата(EKoshelev @ 15.11.2004, 04:59)
Vit
Я не умею. Может научишь? Или наколочку какую-нить кинешь где написано?



В FAQ статья - всё о файлах...


Цитата(EKoshelev @ 15.11.2004, 04:59)
Вообще-то я собирался только в одном направлении читать


Цитата(EKoshelev @ 15.11.2004, 04:59)
Я чё-то где-то читал, что там (в TStirngs'e) может поместится только 64 кг. И то с какими-то половыми извращениями. Просто у меня привычка такая (какой же я, блин, крутой), что всё время пытаюсь так, чтобы работало с чем угодно. То есть, вообще-то я пишу без расчёта на юзание файлов, но в перспективе очень даже не исключено, что эта фишка пригодится.



TStringList может работать с файлами любых размеров, но при размерах больше 10 метров будет работать медленно

Код

t:=TStringList.create;
t.loadfromfile('c:\myfile.txt');
for i:=0 to t.count-1 do
 showmessage(t[i]);

t.free;






TFileStream - работает с файлами любых размеров, но без разбиения на строки, что может быть неудобно для текстового файла.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)