Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Парсинг строки [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).


Наверх

Титульная страница Поиск, карта сайта Написать письмо