![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Массив строк. как ввести в него данные?
Pcrepair © (2012-07-17 10:46:00)Добрый день. Есть код:
(* Функция удаления указанного слова из строки
(вместе со строкой) - предлоги и запрещенные к поиску слова*)
function TForm1.DelUselessWords(const S:string):string;
var T1,T2:TStringList; i,f:integer; W,UseLess:string;
UseLessWords:array of string; (*объявляем динамический массив строк*)
begin
//UseLessWords - вот тут надо ввести строки в массив
//UseLessWords[0]:= 'без'; (*Exception class $C0000005 with message
//'access violation at 0x00406f66: write of address 0x00000000'*)
//UseLessWords:=['без','перед']; (*E2010 Incompatible types: 'Integer' and 'string'*)
T1:=TStringList.Create;
T2:=TStringList.Create;
T1.Text:=S; (*ввод строк из МЕМО1*)
for f := 0 to Length(UseLessWords)-1 do (*Цикл подстановки слова для проверки
из массива строк*)
begin
UseLess:=UseLessWords[f]; (*вводим из массива очередную строку*)
ShowMessage(UseLess);
(*============================================*)
(*цикл проверки строки на наличие ненужного, если ненужного нет, тогда
добавить строку в выход*)
for i := 0 to T1.Count-1 do
begin
W:=T1.Strings[i]; (*ввод строк для проверки в цикле*)
if (AnsiPos(UseLess,W)=0)(*затычка для заданного слова*)
then
T2.Add(W); (*накопление валидных строк*)
end;
(*============================================*)
end;
DelUselessWords:=T2.Text; (*вывод результата в МЕМО2*)
T1.Free;
T2.Free;
end;
(*=======================================================*)
end.
Вопрос: как правильно ввести в массив строки?
icWasya (2012-07-17 12:41:00) [1]Ну а если далее предполагается загрузить строки из файла,
то почему бы не использовать TStringList и здесь?
AV (2012-07-17 11:35:00) [2]а-ля так можно сделать
public { Public declarations }
StrA: array of string;
procedure AddToStrA(A: array of string);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.AddToStrA(A: array of string);
var
i, L: Integer;
s: string;
begin
L := Length(StrA);
SetLength(StrA, L + Length(A));
for i := 0 to Length(A) - 1 do
StrA[L+i] := A[i];
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
AddToStrA(['qwer','asd']);
for i := 0 to Length(StrA) - 1 do
ShowMessage( StrA[i] );
AddToStrA(['qwer2','asd2']);
for i := 0 to Length(StrA) - 1 do
ShowMessage( StrA[i] );
end;
Медвежонок Пятачок (2012-07-17 11:30:00) [3]Как оно выглядит - нарисовано в хелпе.
В момент запуска это не поможет, так как по-русски написано, что все элементы должны быть известны на момент компиляции. Или иными словами - все элементы должны быть в исходнике зашиты.
Pcrepair (2012-07-17 11:28:00) [4]ну и ..... как оно выглядит?
вообще далее предполагается загрузить строки из файла в момент запуска программы. вот с текущими косяками разберусь
Медвежонок Пятачок (2012-07-17 11:20:00) [5]есть общая.
но только если все элементы известны уже в момент компиляции.
Pcrepair (2012-07-17 11:05:00) [6]AV, спасибо
SetLength(UseLessWords ,9);
UseLessWords[0]:= 'без';
НО, теперь каждое слово можно только отдельно вводить в массив? там нет никакой общей записи?
AV (2012-07-17 10:49:00) [7]
> //UseLessWords - вот тут надо ввести строки в массив
> //UseLessWords[0]:= 'без'; (*Exception class $C0000005
> with message
> //'access violation at 0x00406f66: write of address 0x00000000'*)
> //UseLessWords:=['без','перед']; (*E2010 Incompatible types:
> 'Integer' and 'string'*)
>
SetLength(UseLessWords , скока_вешать_в граммах_строк)
а потом уже
UseLessWords[конкретный грамм]