![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |
|
#8
|
|||
|
|||
|
Цитата:
Код:
var Temp: TStringList;
begin
Temp:=TStringList.Create;
Temp.LoadFromFile('Text.txt');Код:
L:=Temp.Strings[StrToInt(Y)]; L:=L[StrToInt(X)-1]; Вот только если понадобится заменить какой-то из символов... мм... не знаю как его... можно ли... |
|
#9
|
||||
|
||||
|
Код:
Temp.Strings[i][j]:='a'; TStringList это есть динамический массив строк с кучей методов, а каждая строка - динамический массив. P.S. Код:
Temp.Strings[StrToInt(Y)] L[StrToInt(X)-1]; ![]() Последний раз редактировалось Bargest, 08.12.2011 в 00:26. |
|
#10
|
|||
|
|||
|
Тогда так
Код:
L:=Temp.Strings[StrToInt(Y)][StrToInt(X)-1]; Подскажите пожалуйста один такой вопрос. Немного не по теме конечно, но... Вот как сделать программно что бы объект был на переднем плане относительно других объектов. Нашел решение при создании Цитата:
Код:
for i := 0 to 4 do
begin
for j := 0 to 4 do
begin
img[i, j] := TImage.Create(nil);
img[i, j].Picture.LoadFromFile('1.bmp');
img[i, j].Left := i*32;
img[i, j].Top := j*32;
img[i, j].Parent := Form1;
end;
end;Последний раз редактировалось Kaktuz, 08.12.2011 в 01:05. |
|
#11
|
||||
|
||||
|
Великая и могучая СПРАВКА сообщает:
Цитата:
|
|
#12
|
|||
|
|||
|
Цитата:
и стандартной справкой не пользуюсь.Наказать... Нет что бы подсказать... mail.ru... |
|
#13
|
||||
|
||||
|
Цитата:
Вот за это и нужно наказывать, справка для того и пишется. |
|
#14
|
|||
|
|||
|
Цитата:
|
|
#15
|
||||
|
||||
|
И не может, Strings - одномерный массив:
Цитата:
Код:
Temp.Strings[i]:='a'; Temp[i]:='a'; Temp.Strings[j]:='a'; Temp.[j]:='a'; |