Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Array of String, Помогите ламеру 
:(
    Опции темы
Nic442
Дата 5.4.2006, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



Надо создавать массив, но неисвестно его количество. Т.е. количество элементов будет наращиваться по одному и неизвестно конечное. Я бы, конечно мог, ограничить его 1000 но просто его надо будет очищать, причем очень часто. И если в массиве будет один элемент, то нецелессообразно гнать цикл до 1000. Я понимаю, что нужны указатели, но плохо их знаю. Можите привести пример заполнения массива? smile

Код

struct_name: array of String;

PM MAIL   Вверх
Poseidon
Дата 5.4.2006, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Код

procedure MyProcedure;
const col = 10; // количество элементов массива
var
struct_name: array of String;
i: integer;
begin
for i:= 0 to col do
  begin
  SetLength(struct_name, Length(struct_name)+1); // увеличиваем размер массива на 1
  struct_name[i]:= IntToStr(i); // заполняем массив
  end;
end;


Массив будет от 0 до Length(struct_name)-1

Это сообщение отредактировал(а) Poseidon - 5.4.2006, 00:58


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Nic442
Дата 5.4.2006, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет




ВОТ СПАСИБО. Я даже не ожидал, что обойдётся без указателей. СПАСИБО smile . Я чуть не повесился, теперь буду дальше лопатить прогу.
А можно ещё вопрос: Как string запихнуть в буфер? (Вы просто так быстро ответили :-) )
PM MAIL   Вверх
Poseidon
Дата 5.4.2006, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Один топик - один вопрос!

Следуй этому правилу ;)

PS Как я понимаю "буфер" - это буфер обмена.
Добавь в uses Clipbrd
и вот так добавляй
Код

Clipboard.SetTextBuf(PChar(YouText));
понятно что YouText: string


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Nic442
Дата 5.4.2006, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



СПАСИБО
Тогда вопросов больше не имею. Ещё раз спасибо.

{Close Theme}
PM MAIL   Вверх
Alex
Дата 5.4.2006, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Хотелось бы сделать небольшое уточнение про заполнение массива, т.к. кол-во элементов в массиве перед выполнением цикла нам известно заранее, то нет необходимости увеличивать размер массива в цикле (это очень не эффективно на больших массивах), лучше выставить требуемый размер массива до цикла:
Код

const col = 10; // количество элементов массива
var
  struct_name: array of String;
  i: integer;
begin
  SetLength(struct_name, col+1); // Устанавливаем размер массива
  for i:= 0 to col do begin
    struct_name[i]:= IntToStr(i); // заполняем массив
  end;
end;


Это сообщение отредактировал(а) Alex - 5.4.2006, 08:39


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Marriage
Дата 5.4.2006, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Код

procedure TForm1.Button1Click(Sender: TObject);
var
sl:TstringLIst;
begin
 sl:=TstringList.Create;
 sl.Add('123');
 sl.Free;
end;


И обращаться как sl.Strings[0] ,sl.Strings[1] по индексам. smile)
При чем можешь сразу же сохранить фсе это в файл sl.SaveToFile или загрузить sl.LoadFromFile



--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Nic442
Дата 5.4.2006, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



Я понимаю, что лучше выносить функции за цикл.
SetLength(struct_name, col+1);
Но в любом случае у меня получится в цикле. Дело в том что у меня цикл в цикле. Но вот опять возник вопрос по теме. А как мне очищать массив, чтобы количество элементов стало равно 0?

Код

var    
  struct_name: array of String;    
  i: integer;
begin 
 i:=Hight(struct_name);
 for i:=i downto -1 do begin
   struct_name[i]:='';
   SetLength(struct_name, Length(struct_name)-1);              // ВОПРОС вот так вот можно ?
   dec(i);
 end;
end;

PM MAIL   Вверх
Romikgy
Дата 5.4.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(Marriage @ 5.4.2006, 07:45 Найти цитируемый пост)
TstringList

через это нельзя
Nic442, smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alexeis
Дата 5.4.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

А как мне очищать массив, чтобы количество элементов стало равно 0?

struct_name := Nil;
для строки
struct_name[i] := '';
Добавлено @ 12:51
Вообще странный цикл
Цитата

for i:=i down
smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
~FoX~
Дата 5.4.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Цитата(Nic442 @ 5.4.2006, 13:31 Найти цитируемый пост)

for i:=i downto -1 do begin
  struct_name[i]:='';
  SetLength(struct_name, Length(struct_name)-1);              // ВОПРОС вот так вот можно ?
  dec(i);
end;

НЕТ!
1. i:=i -> incompotibe types .......
2. dec(i) -> Assigment to FOR-Loop variable (i)
3.
Цитата(Nic442 @ 5.4.2006, 13:31 Найти цитируемый пост)
А как мне очищать массив, чтобы количество элементов стало равно 0?


Код

SetLength(struct_name, 0);




--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Moskalev
Дата 5.4.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.4.2006
Где: Академгородок

Репутация: нет
Всего: нет



Я сам всегда делал:
Код

SetLength(struct_name, 0); //длина массива становится 0

но думаю, что это не правильно (не совсем правильно по нормам языка, ведь есть nil)
PM MAIL   Вверх
~FoX~
Дата 5.4.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Moskalev,
Цитата(Nic442 @ 5.4.2006, 13:31 Найти цитируемый пост)
чтобы количество элементов стало равно 0?

Как задача поставлена, так ее и решают!
Добавлено @ 13:06
только вот я не понял, а чем собствено TStrings, TStringList не устраивает, зачем велосипед то изобритать?


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Nic442
Дата 5.4.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



Romikgy
Код

через это нельзя 
Я не разу не использовал этот тип. Но сейчас попробую...Может не будет той ошибки которая внизу.

Код

struct_name := Nil;
Так и сделаю. Если это правильно.

А как передавать массив в функцию, и в функции добавлять к нему элементы?

Код

var 
 Slova: array of String;
...
   SetLength(Slova, Length(Slova)+1);
   Slova[0]:='тут ';
   SetLength(Slova, Length(Slova)+1);
   Slova[1]:='там ';
....
   My_Find(Slova);


Код

function TIndex_Form.My_Find(struct_name: array of String)
begin
   ....
    SetLength(struct_name, Length(struct_name)+1);          // Так выдаёт ошибку
    struct_name[High(struct_name)+1]:='проро ';
  ....
end;

PM MAIL   Вверх
~FoX~
Дата 5.4.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



В функцию ты не можешь передавать массив, только указатель на него....


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.