![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Canyon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 11.3.2012 Репутация: нет Всего: нет |
Мне нужно из нескольких TStringList перевести строки в массивы строк, что бы потом легче их использовать.
Сделал функцию которая это все перекидывает, но вот она почему то не работает. После выполнения функции STR пустая!!! Что я сделал не так? Цель такова. В файлах хранятся настройки программы. Как их лучше прочитать и сделать красиво и со скоростью работы ничего не подводило? Думал через ReadLn, но кода больше и не хочется закорачиваться. Решил Через TStringList. Может есть какое то мудрое решение.
|
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Поставь var перед OutStr : Array Of String): Boolean;
Это разные вещи.Некрасиво. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Canyon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 11.3.2012 Репутация: нет Всего: нет |
Спасибо огромное за помощь. Могли бы ли Вы еще высказать мнение по поводу хранения и загрузки таким образом настроек программы. Может быть что то подскажете объяснить пожалуйста почему надо ставить var в моем случае? в чем разница между Array [0..50] Of String; и Array Of String |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Без var происходит копирование исходной переменной. С var - в функцию передается адрес переменной. Array [0..50] Of String - 51 указатель, записанные последовательно. Array Of String - указатель на 9 байт структуры
Хотя delphi и приводит неявное преобразование, но такая запись сильно отличается от того, что создаст компилятор. Это сообщение отредактировал(а) Чучмек - 19.3.2012, 13:01 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Canyon |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 11.3.2012 Репутация: нет Всего: нет |
Вот и появилась ошибка. Прочитал Ваше последнее сообщение и сразу увеличил кол-во символов строках и мне уже приложение выдает ошибку.
А что мне тогда подставить вместо Array of String это Array of [0..50] of String; не подходит; // Это Вы предложили в эту структуру загружать данные?
UPD Хотя это я ошибку сам допустил. Все работает. Но вопрос теперь такой/ Правильно ли я описал OutStr в которую пападает переменная STR???
Это сообщение отредактировал(а) Canyon - 19.3.2012, 13:11 |
||||
|
|||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Нет, это внутренняя структура array of ... STR сделай тоже Array Of String, а а в RWStr задай размер
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Нет, это open array parameter, всё законно Добавлено через 9 минут и 52 секунды Canyon, запись array of имеет разное значение в зависимости от контекста. Если она встречается в описании аргумента процедуры/функции это уже не динамический массив. Читать тут Это сообщение отредактировал(а) bems - 19.3.2012, 22:19 -------------------- Обижено школьников: 8 |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Да,действительно. век живи - век учись, дураком помрешь -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Canyon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 11.3.2012 Репутация: нет Всего: нет |
Спасибо. Попробую прочитать завтра. с английским очень плохо.
Скажите как можно узнать сколько указателей у переменной STR? |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Каких указателей? Ты имел в виду сколько строк в массиве? Так ты же сам описал его как 0..50. Вот 51 и есть
Если нужно узнать массив какой длины передан в функцию, то Length(OutStr) это количество. Но чаще бывает нужен индекс последнего элемента. Это High(OutStr) Внутри функции самый первый индекс OutStr всегда 0, независимо как объявлен массив который передали в функцию -------------------- Обижено школьников: 8 |
|||
|
||||
| Canyon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 11.3.2012 Репутация: нет Всего: нет |
Спасибо. Сегодня читал про High, но упустил из виду.
P.S. Вспомнил подпись одного участника, вот только не помню кого и на каком форуме. "Правильно задный вопрос, уже половина ответа" - Убедился сам. Спасибо тема решена. |
|||
|
||||
| northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
<offtop> Попытка воплотить Compiler Magic в позднем исполнениии. </offtop> -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Почему попытка? помоему всё удалось и нормально работает, не?
-------------------- Обижено школьников: 8 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
И это утверждение так же не верно. Переменная-динамический массив является указателем НА НУЛЕВОЙ(т.е. по сути-первый) элемент этого массива. А вообще к чему новичку голову такими подробностями забивать? -------------------- There are always someone smarter than you... |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Да, но перед ним идет размер массива и счетчик ссылок. Это сообщение отредактировал(а) Чучмек - 20.3.2012, 23:04 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |