Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.12.2011, 19:42
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию Создание переменных

По сути глупый вопрос, но ни один урок, ни какой Google мне не дали ответ.
Как создать переменную в процессе работы?
В данный момент я хочу считывать текст с файла и каждый символ помещать в отдельную переменную. Но длина строки и количество строк неизвестно, создать нужное количество переменные заранее не получится. Как быть?
Ответить с цитированием
  #2  
Старый 04.12.2011, 20:02
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

динамический массив или TStringlist
а вобще:
Цитата:
memo.lines.loadfromfile
memo.lines[i]

Последний раз редактировалось Pyro, 04.12.2011 в 20:06.
Ответить с цитированием
  #3  
Старый 04.12.2011, 20:21
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

"Каждый символ помещать в свою переменную"

А не слишком ли жирно?
1 символ- это 1 байт.
Указатель на переменную- это 4 байта. И ты собираешься потратить 4 байта на то чтобы хранить 1 байт?
Делать динамич массив нет смысла. Проще свего считать весь файл в длинную строку. Это и есть динамич массив.
Ну а если надо поделить на строки (те организовать 2- мерный массив)- то см. совет Pyro. Лучше этого не скажешь.

Последний раз редактировалось chainik, 04.12.2011 в 20:28.
Ответить с цитированием
  #4  
Старый 04.12.2011, 21:14
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Да нет. Так надо. В файле указанны определенные данные, в целом процедура должна выглядеть подобным образом.
- Определяем количество строк в файле
- Определяем длину первой строки
- Создаем цикл который поместит каждый символы в отдельную переменную.
После они (значения в переменных) будут служить координатами.
P.S. тяжело переходить с конструкторов на программный код, в конструкторах все решается одной строкой
Ответить с цитированием
  #5  
Старый 04.12.2011, 21:38
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
В файле указанны определенные данные
Цитата:
- Создаем цикл который поместит каждый символы в отдельную переменную.
После они (значения в переменных) будут служить координатами.
Ну так о чем и говорят. Если каждый символ (байт) - координата, то просто берем это как строку или N строк. Работать с ней можно как угодно. Потому что строка - такой же массив байт.
Можно считать целым куском в оперативку (если там не слишком много данных) или по частям, и работать как с обычным массивом, брать элементы по индексу. Создание именно отдельных переменных является нерациональным расходованием памяти и бредом. Если все же ну очень хочется проверить, насколько это бред - придется делать массив указателей на байты. В х32 это увеличит потребляемую память в 5 раз (1 байт - значение и 4 указатель), а в х64 скорее всего сразу в 9 раз (там указатели 8 байт).
Только я никак не пойму: зачем тебе хранить в отдельных переменных? Код сам не модифицируется, но он должен работать с любым числом "переменных" => он должен быть написан с использованием динамического массива указателей на эти "переменные". Но если делаешь массив указателей, почему бы не сделать просто массив значений, и хранить только адрес первого значения, остальные получать как "адрес массива + номер байта"?

P.S. Не знаю, про какие "конструкторы" говоришь, но могу сказать одно: если оно имеет отношение к выполнению программы на машине и если это не какая-то детская игрушка, а хоть сколько-нибудь полезная вещь, то там на деле это реализуется через динамический массив (он же строка).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 04.12.2011 в 21:50.
Ответить с цитированием
  #6  
Старый 04.12.2011, 21:39
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

если в файле указаны определенные данные- то это типированный файл. и читать его надо не байтами, а в соответствующую структуру. См справку по типированным файлам. Без этого дальнейшая дискуссия теряет смысл. Это испорченный телефон.
Ответить с цитированием
  #7  
Старый 04.12.2011, 21:44
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Примерно ясно. Спасибо.

Цитата:
P.S. Не знаю, про какие "конструкторы" говоришь, но могу сказать одно: если оно имеет отношение к выполнению программы на машине и если это не какая-то детская игрушка, а хоть сколько-нибудь полезная вещь, то там на деле это реализуется через динамический массив (он же строка).
Не знаю как это выглядит системно, но переменные создавались в процессе работы, даже если они ранее не существовали.
Цитата:
динамический массив или TStringlist
Совсем туго что-то... TStringlist сразу отпадает, не подходит по принципу построения. динамический массив - что-то как-то вяло... Может может кто объяснить?
Код:
var
  Form1: TForm1;
  New  : TStringList;
  News : Array of Array of string;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  New := TStringList.Create;
  New.Add('Cat');
  New.Add('Mouse');
  New.Add('Giraffe');

  SetLength(News[0], 1);
  SetLength(News[1], 2);
  SetLength(News[2], 3);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(New[StrToInt(Edit1.Text)]);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
News[0,0] := 'News';
ShowMessage(News[0,0]);
end;

Последний раз редактировалось Kaktuz, 05.12.2011 в 01:05.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025