Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Чтение из файла, Чтение из файла сложной структуры 
:(
    Опции темы
Goth
Дата 10.5.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.5.2007

Репутация: нет
Всего: нет



Такой вопрос: как из файла прочитать сложную структуру данных, типа 

Word -100.2344 24.19
Letter (123, 11.00, 223)

чтобы в итоге я вырвал оттуда две строки (Word, Letter), и 5 чисел (разные по типу)? Перешел на делфи недавно, поэтому не в курсе, как это делается =) 
PM MAIL   Вверх
Chazer
Дата 13.5.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упоротый гентушник
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 18.5.2006
Где: Украина

Репутация: нет
Всего: нет



Если речь идёт о текстовом файле то:
Обязательно ТАК хранить?
проще будет так
Код

Word
-100.2344 24.19
Letter
123 11.00 223

иначе заранее нужно знать размер каждой строки в байтах или искать её окончание по пробелу.
вот пример:

Код

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var  f:text;
  s1,s2,tmps:string;
  x1,x2,x3:real;
  y1,y2,tmpi:integer;
  tmp:char;
begin
s1:='';
s2:='';
assign(f,'maza.txt');
reset(f);
{Считываем первую строчку посимвольно до первого пробела}
while not eof(f) do
  begin
  read(f,tmp);
  if tmp=' 'then break;
  s1:=s1+tmp;
  end;

{Считываем две переменные дробного типа без всякого гимора}
read(f,x1,x2);

{Считываем вторую строчку посимвольно до первого пробела}
while not eof(f) do
  begin
  read(f,tmp);
  if tmp=' 'then break;
  s2:=s2+tmp;
  end;

{Считываем ненужную дужку '('}
read(f,tmp);

{Далее считываем временную строчку посимвольно ДО запятой}
tmps:='';
while not eof(f)do
  begin
  read(f,tmp);
  if tmp=',' then break;
  tmps:=tmps+tmp;
  end;
{И переводим результат в числовой тип Integer, который присваиваем переменной}
y1:=StrToInt(tmps);

{Аналогично и здесь. Считываем посимвольно строчку До запятой}
tmps:='';
while not eof(f)do
  begin
  read(f,tmp);
  if tmp=',' then break;
  tmps:=tmps+tmp;
  end;
{По идее, в временной строчке должно быть дробное число, которое
мы закинем в определённую переменную}
val(tmps,x3,tmpi);

{И считываем посимвольно строчку, только на этот раз ДО дужки ')'}
tmps:='';
while not eof(f)do
  begin
  read(f,tmp);
  if tmp=')' then break;
  tmps:=tmps+tmp;
  end;
{И переводим результат в числовой тип Integer, который присваиваем переменной}
y2:=StrToInt(tmps);

close(f);
{Просматриваем результат}
write(s1);
writeln(s2);
writeln(x1:10:4);
writeln(x2:10:2);
writeln(x3:10:2);
writeln(y1);
writeln(y2);
readln;
end.

...да, это жуткий быдлокод. У кого-то есть другие идеи?
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.