![]() |
|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
![]() Цитата:
Цитата:
Можно считать целым куском в оперативку (если там не слишком много данных) или по частям, и работать как с обычным массивом, брать элементы по индексу. Создание именно отдельных переменных является нерациональным расходованием памяти и бредом. Если все же ну очень хочется проверить, насколько это бред - придется делать массив указателей на байты. ![]() Только я никак не пойму: зачем тебе хранить в отдельных переменных? Код сам не модифицируется, но он должен работать с любым числом "переменных" => он должен быть написан с использованием динамического массива указателей на эти "переменные". Но если делаешь массив указателей, почему бы не сделать просто массив значений, и хранить только адрес первого значения, остальные получать как "адрес массива + номер байта"? P.S. Не знаю, про какие "конструкторы" говоришь, но могу сказать одно: если оно имеет отношение к выполнению программы на машине и если это не какая-то детская игрушка, а хоть сколько-нибудь полезная вещь, то там на деле это реализуется через динамический массив (он же строка). jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось 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. |