![]() |
|
|
Регистрация | << Правила форума >> | 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. |
#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]; ![]() jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось 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
|
||||
|
||||
![]() Великая и могучая СПРАВКА сообщает:
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#12
|
|||
|
|||
![]() Цитата:
![]() Наказать... Нет что бы подсказать... mail.ru... |
#13
|
||||
|
||||
![]() Цитата:
Вот за это и нужно наказывать, справка для того и пишется. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#14
|
|||
|
|||
![]() Цитата:
|
#15
|
||||
|
||||
![]() И не может, Strings - одномерный массив:
Цитата:
Код:
Temp.Strings[i]:='a'; Temp[i]:='a'; Temp.Strings[j]:='a'; Temp.[j]:='a'; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |