![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Парсинг строки [D6, WinXP]
Федюлин Григорий © (2005-01-04 12:45:00)Имеется текстовой файл, в котором хранятся данный таким образом:
aaa aaa aaa
Как можно поместить каждую aaa в отдельную переменную?
begin...end (2005-01-07 12:07:00) [1]> [19] Erik1 © (07.01.05 11:57)
А нужно ли это, если как раз у TStrings имеются свойства Delimiter и DelimitedText?
Erik1 (2005-01-07 11:57:00) [2]function ListStr(const S, Separator: string; i: Integer = 0): TStrings;
var
Posit, Size: Integer;
Buf: String;
begin
Posit := 1;
Result := TStringList.Create;
while (Posit > 0) do
begin
Posit := TailPos(S, Separator, i+1);
if Posit = 0 then
Size := Length(S)
else
Size := Posit-i-1;
Buf := Trim(Copy(S, i+1, Size));
i := Posit;
if Buf '' then
Result.Add(Buf);
end;
end;
Фуикцию TailPos можно скачать из инета. http://delphibase.endimus.ru/?action=viewfunc&topic=strsearch&id=10271
begin...end (2005-01-07 11:24:00) [3]> [17] Гриня (07.01.05 09:48)
Сменить шрифт в редакторе кода?
Гриня (2005-01-07 09:48:00) [4]Уважаемые господа!!!
А что делать если ааа на русском языке и в Делфях они отображаются знаками вопроса(???)
Экспериментатор (2005-01-06 21:04:00) [5]IMHO RxLibrary с функциями WordPosition ExtractWord и другими
РУЛИТ
Прошу обратить внимание на DBGridEh
сохранение и восстановление настроек колонок и других параметров производится с использованием функций уж очень похожих на те которые указаны выше (и наименование то же практически)
Anatoly Podgoretsky (2005-01-06 14:24:00) [6]Неплохим варианто будет использование функции, возвращающей очередное слово. При этом можно обойтись без delete, что сильно ускорит и уменьшит расход памяти.
Anatoly Podgoretsky (2005-01-06 14:22:00) [7]Fay © (06.01.05 12:14) [11]
Речь не об ужасе, кроме того TStringList точно такой же ужас с ресурсами, скоростью, объемом и сложностью кода. Вопрос то о путям выполнения задачи - это один из путей. А количество путей выполнения данной задачи множество.
KSergey (2005-01-06 14:05:00) [8]Я фигею дорогая редакция....
> [8] KSergey © (05.01.05 13:34)
> См. TStringList.Items[]
> [9] Федюлин Григорий © (06.01.05 11:58)
> Пожалуйста поместите програмный код,
s1, s2, s3: String;
s1 := StrList.Items[0];
s2 := StrList.Items[1];
s3 := StrList.Items[2];
Так лучше?
Федюлин Григорий (2005-01-06 13:14:00) [9]Sorry, это я к KSergey обращался.
Fay (2005-01-06 12:14:00) [10]2 Anatoly Podgoretsky © (04.01.05 13:08) [4]
>> Copy + Pos + Delete
Это будет ужасно.
begin...end (2005-01-06 12:13:00) [11]> Федюлин Григорий © (06.01.05 11:58) [9]
Куда поместить-то? Здесь уже поместили. Куда ещё?
"Ахринеть!" (© не помню чей)
Федюлин Григорий (2005-01-06 11:58:00) [12]Пожалуйста поместите програмный код, а то я в работе со строками на програмном уровне не очень...
KSergey (2005-01-05 13:34:00) [13]> 7] Федюлин Григорий © (05.01.05 13:31)
> Уважаемые мастера, как можно помещать каждое aaa на одной
> строке в отдельную переменную
См. TStringList.Items[]
Федюлин Григорий (2005-01-05 13:31:00) [14]Уважаемые мастера, как можно помещать каждое aaa на одной строке в отдельную переменную, используя Delimiter? На второй, третьей и т.д. строке данные aaa перезаписывают старые данные в соответсвующих переменных. Спасибо!
Экспериментатор (2005-01-05 10:59:00) [15]если использовать RX Library, то
в модуле rxStrUtils есть полезные функции
WordPosition WordCount ExtractWord ExtractWordPos
как раз для таких случаев
begin...end (2005-01-04 13:24:00) [16]> Федюлин Григорий
var
Str: String;
Arr: array of String;
I: Integer;
begin
// Читаем в строку S содержимое файла
SetLength(Arr, 1);
for I := 1 to Length(Str) do
if Str[I] = ' ' then
begin
SetLength(Arr, Length(Arr) + 1);
Arr[High(Arr)] := EmptyStr
end
else
Arr[High(Arr)] := Arr[High(Arr)] + Str[I]
end.
Anatoly Podgoretsky (2005-01-04 13:08:00) [17]Copy + Pos + Delete
TUser (2005-01-04 13:07:00) [18]var aaas: array of string;
f: textfile;
i: integer;
s, buf: string;
begin
SetLength(aaas,0);
assignfile(f,filename);
reset(f);
while not eof(f) do begin
readln(f,s);
s:=s+' ';
i:=1; buf:='';
while i <= length (s) do begin
if s[i] = '' then begin
SetLength(aaas,length(aaas)+1);
aaas[length(aaas)-1]:=buf;
buf:='';
end else
buf:=buf+s[i];
inc (i);
end;
end;
end;
MBo (2005-01-04 12:49:00) [19]1. Читать с помощью Read
2. TStringList.CommaText использовать в применении к каждой строке
begin...end (2005-01-04 12:48:00) [20]> Федюлин Григорий © (04.01.05 12:45)
Можно сделать самому (обычный цикл), а можно воспользоваться TStringList (Delimiter, DelimitedText).