| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Проблема с масивом и строками |
| Автор: Canyon 19.3.2012, 11:41 | ||
| Мне нужно из нескольких TStringList перевести строки в массивы строк, что бы потом легче их использовать. Сделал функцию которая это все перекидывает, но вот она почему то не работает. После выполнения функции STR пустая!!! Что я сделал не так? Цель такова. В файлах хранятся настройки программы. Как их лучше прочитать и сделать красиво и со скоростью работы ничего не подводило? Думал через ReadLn, но кода больше и не хочется закорачиваться. Решил Через TStringList. Может есть какое то мудрое решение.
|
| Автор: Чучмек 19.3.2012, 11:57 |
| Поставь var перед OutStr : Array Of String): Boolean; Это разные вещи.Некрасиво. |
| Автор: Canyon 19.3.2012, 12:24 | ||
Спасибо огромное за помощь. Могли бы ли Вы еще высказать мнение по поводу хранения и загрузки таким образом настроек программы. Может быть что то подскажете объяснить пожалуйста почему надо ставить var в моем случае? в чем разница между Array [0..50] Of String; и Array Of String |
| Автор: Чучмек 19.3.2012, 12:58 | ||
Без var происходит копирование исходной переменной. С var - в функцию передается адрес переменной. Array [0..50] Of String - 51 указатель, записанные последовательно. Array Of String - указатель на 9 байт структуры
Хотя delphi и приводит неявное преобразование, но такая запись сильно отличается от того, что создаст компилятор. |
| Автор: Canyon 19.3.2012, 13:03 | ||||
| Вот и появилась ошибка. Прочитал Ваше последнее сообщение и сразу увеличил кол-во символов строках и мне уже приложение выдает ошибку. А что мне тогда подставить вместо Array of String это Array of [0..50] of String; не подходит; // Это Вы предложили в эту структуру загружать данные?
UPD Хотя это я ошибку сам допустил. Все работает. Но вопрос теперь такой/ Правильно ли я описал OutStr в которую пападает переменная STR???
|
| Автор: Чучмек 19.3.2012, 14:02 | ||
Нет, это внутренняя структура array of ... STR сделай тоже Array Of String, а а в RWStr задай размер
|
| Автор: bems 19.3.2012, 22:18 |
Нет, это open array parameter, всё законно Добавлено через 9 минут и 52 секунды Canyon, запись array of имеет разное значение в зависимости от контекста. Если она встречается в описании аргумента процедуры/функции это уже не динамический массив. Читать http://docwiki.embarcadero.com/RADStudio/en/Parameters_(Delphi)#Open_Array_Parameters |
| Автор: Чучмек 19.3.2012, 23:20 |
Да,действительно. век живи - век учись, дураком помрешь |
| Автор: Canyon 19.3.2012, 23:48 |
| Спасибо. Попробую прочитать завтра. с английским очень плохо. Скажите как можно узнать сколько указателей у переменной STR? |
| Автор: bems 19.3.2012, 23:54 |
| Каких указателей? Ты имел в виду сколько строк в массиве? Так ты же сам описал его как 0..50. Вот 51 и есть Если нужно узнать массив какой длины передан в функцию, то Length(OutStr) это количество. Но чаще бывает нужен индекс последнего элемента. Это High(OutStr) Внутри функции самый первый индекс OutStr всегда 0, независимо как объявлен массив который передали в функцию |
| Автор: Canyon 20.3.2012, 01:25 |
| Спасибо. Сегодня читал про High, но упустил из виду. P.S. Вспомнил подпись одного участника, вот только не помню кого и на каком форуме. "Правильно задный вопрос, уже половина ответа" - Убедился сам. Спасибо тема решена. |
| Автор: northener 20.3.2012, 01:27 |
<offtop> Попытка воплотить Compiler Magic в позднем исполнениии. </offtop> |
| Автор: bems 20.3.2012, 02:28 |
| Почему попытка? помоему всё удалось и нормально работает, не? |
| Автор: MetalFan 20.3.2012, 17:22 |
И это утверждение так же не верно. Переменная-динамический массив является указателем НА НУЛЕВОЙ(т.е. по сути-первый) элемент этого массива. А вообще к чему новичку голову такими подробностями забивать? |
| Автор: northener 21.3.2012, 00:17 |
Да. Но это всё-таки не Compiler Magic. Вот в функциях типа Write, Writeln, Read, Readln - действительно Compiler Magic. Ну и да. Работает. Но я всё-таки поставил тэг Offiop. Типа - это мой комментарий к факту. |
| Автор: bems 21.3.2012, 00:21 |
| Там скрытый аргумент, тоже магия компилятора |
| Автор: northener 21.3.2012, 00:21 |
Не успел ответить вовремя. Ссылаться (указывать) можно лишь на конкретный адрес в памяти. А что там на самом деле знает компилятор. Добавлено @ 00:26 Не буду спорить, ибо вы тоже правы. Добавлено @ 00:30 Ещё один оффтоп. Вот что мне очень не нравится в форумах Источников и Винграда. Я хотел ответить двум авторам на два совершенно разных замечания. А движок форума объединил их в один пост. :( |
| Автор: MetalFan 21.3.2012, 09:02 |
| Народ, отдалились от темы) |