![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
По сути глупый вопрос, но ни один урок, ни какой Google мне не дали ответ.
Как создать переменную в процессе работы? В данный момент я хочу считывать текст с файла и каждый символ помещать в отдельную переменную. Но длина строки и количество строк неизвестно, создать нужное количество переменные заранее не получится. Как быть? |
|
#2
|
|||
|
|||
|
динамический массив или TStringlist
а вобще: Цитата:
Последний раз редактировалось Pyro, 04.12.2011 в 20:06. |
|
#3
|
|||
|
|||
|
"Каждый символ помещать в свою переменную"
А не слишком ли жирно? 1 символ- это 1 байт. Указатель на переменную- это 4 байта. И ты собираешься потратить 4 байта на то чтобы хранить 1 байт? Делать динамич массив нет смысла. Проще свего считать весь файл в длинную строку. Это и есть динамич массив. Ну а если надо поделить на строки (те организовать 2- мерный массив)- то см. совет Pyro. Лучше этого не скажешь. Последний раз редактировалось chainik, 04.12.2011 в 20:28. |
|
#4
|
|||
|
|||
|
Да нет. Так надо. В файле указанны определенные данные, в целом процедура должна выглядеть подобным образом.
- Определяем количество строк в файле - Определяем длину первой строки - Создаем цикл который поместит каждый символы в отдельную переменную. После они (значения в переменных) будут служить координатами. P.S. тяжело переходить с конструкторов на программный код, в конструкторах все решается одной строкой ![]() |
|
#5
|
||||
|
||||
|
Цитата:
Цитата:
Можно считать целым куском в оперативку (если там не слишком много данных) или по частям, и работать как с обычным массивом, брать элементы по индексу. Создание именно отдельных переменных является нерациональным расходованием памяти и бредом. Если все же ну очень хочется проверить, насколько это бред - придется делать массив указателей на байты. В х32 это увеличит потребляемую память в 5 раз (1 байт - значение и 4 указатель), а в х64 скорее всего сразу в 9 раз (там указатели 8 байт).Только я никак не пойму: зачем тебе хранить в отдельных переменных? Код сам не модифицируется, но он должен работать с любым числом "переменных" => он должен быть написан с использованием динамического массива указателей на эти "переменные". Но если делаешь массив указателей, почему бы не сделать просто массив значений, и хранить только адрес первого значения, остальные получать как "адрес массива + номер байта"? P.S. Не знаю, про какие "конструкторы" говоришь, но могу сказать одно: если оно имеет отношение к выполнению программы на машине и если это не какая-то детская игрушка, а хоть сколько-нибудь полезная вещь, то там на деле это реализуется через динамический массив (он же строка). Последний раз редактировалось Bargest, 04.12.2011 в 21:50. |
|
#6
|
|||
|
|||
|
если в файле указаны определенные данные- то это типированный файл. и читать его надо не байтами, а в соответствующую структуру. См справку по типированным файлам. Без этого дальнейшая дискуссия теряет смысл. Это испорченный телефон.
|
|
#7
|
|||
|
|||
|
Примерно ясно. Спасибо.
Цитата:
Цитата:
Код:
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. |