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

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

Из TStrings в String (и обратно), при помощи разделителя. [D7, WinXP]


rolex ©   (2005-08-08 14:02:00) 

У меня уже есть готовые функции, но там используется разделитель запятая (",").
Я хочу переделать, чтобы разделитель был не "," а "&$".
Вот бывшие функции (где разделитель ","):

function GetList(S : String):TStrings;
var
   iPosComma : integer;
   sTmp : string;
   tlist:TStrings;
begin
try
tlist:=TStringList.Create;
tlist.Clear;
s := trim(s);
while pos(',',s) > 0 do
   Begin
   iPosComma := pos(',',s);
   sTmp := copy(s,1,iPosComma - 1);
   tlist.Add(sTmp);
   s := copy(s,iPosComma + 1,Length(s));
   End;
if length(s) 0 then tlist.Add(s);
except
on E : Exception do
   ShowMessage(E.Message);
end;
result:=tlist;
End;

Function GetString(tlist:TStrings):String;
var i:integer; S:String;
Begin
if tlist.Count0 then
begin
s:=tlist.Strings[0];
for i:=1 to tlist.Count-1 do s:=s+','+tlist.Strings[i];
result:=s; end else result:='';
End;


Как переделать функцию GetString я знаю, там достаточно поменять в одном месте "," на "&$".
А как переделать GetList(S:String):TStrings; я незнаю. Прошу помочь.


TStas   (2005-08-08 19:59:00) [1]

А вот так не устроит? Разделитель любой
s2 - как раз разделитель, сам ими пользуюсь
function splitToTStringList(s1, s2:String):TStringList;
var
  i, ln:Integer;
  s:String;

begin
Result:=TStringList.Create;
if s2='' then //Если пустая строка, вернуть массив символов
  begin
  for i:=1 to Length(s1) do Result.Add(s1[i]);
  exit;
  end;
ln:=Length(s2);
while (Pos(s2, s1)<>0) do
begin
i:=Pos(s2, s1);
s:=Copy(s1, 1, i-1);
Delete(s1, 1, i+ln-1);
Result.Add(s);
end;

Result.Add(s1);
end;

function joinTStringList(x:TStringList; s:String):String;
var i:Integer;
begin
Result:='';
for i:=0 to x.Count-1 do
   begin
   Result:=Result+x[i];
   if i<x.Count-1 then Result:=Result+s;
   end;
end;


IceBeerg   (2005-08-08 18:39:00) [2]

Kolan ©   (08.08.05 18:29) [14]
Зато теперь знаеш! :)


Kolan   (2005-08-08 18:29:00) [3]

О незнал :)


IceBeerg   (2005-08-08 18:27:00) [4]

Kolan ©   (08.08.05 18:07) [11]
И что экземпляр TStrings заполнится строкакми?

А куда он денется...

Lists the strings in the TStrings object as a single string with the individual strings delimited by carriage returns and line feeds.

Delphi syntax:

property Text: string;

C++ syntax:

__property AnsiString Text = {read=GetTextStr, write=SetTextStr};

Description

Use Text to get or set all the strings in the TStrings object in a single string delimited by carriage return, line feed pairs.

When reading Text, the strings in the list will be separated by carriage return and (on Windows) line feed. If any of the strings in the list contain a carriage return (and line feed), the resulting value of Text will appear to contain more strings than is indicated by the Count property.

When setting Text, the value will be parsed by separating into substrings whenever a carriage return or linefeed is encountered. (The two do not need to form pairs).

If the strings in the list contain carriage return or linefeed characters, a less ambiguous format for the strings is available through the CommaText or DelimitedText property.


IceBeerg   (2005-08-08 18:23:00) [5]

rolex   (08.08.05 14:20) [5]
Блин, откуда у вас такая логика?!

Просто свежий взляд на код...


Kolan   (2005-08-08 18:07:00) [6]


> И обратно
> str:=Strings.Text;
> str:=StringReplace(str,#13#10,'&$',rfReplaceAll);

И что экземпляр TStrings заполнится строкакми?


Slym   (2005-08-08 15:26:00) [7]

str:=StringReplace(str,'&$',#13#10,rfReplaceAll);
Strings.Text:=str;

И обратно
str:=Strings.Text;
str:=StringReplace(str,#13#10,'&$',rfReplaceAll);


rolex   (2005-08-08 15:19:00) [8]

Посмотрел. Не катит. Нету обратного (String to TStrings), и разделитель должен быть из одного символа.


rolex   (2005-08-08 15:09:00) [9]


> BFG9k ©   (08.08.05 14:41) [6]
> TStrings.Delimiter и TStrings.DelimitedText чем не подошли
> ?

Незнал про существование таких. щас буду смотреть.


Slym   (2005-08-08 14:46:00) [10]

Удалено модератором
Примечание: Не в подворотне


BFG9k   (2005-08-08 14:41:00) [11]

TStrings.Delimiter и TStrings.DelimitedText чем не подошли ?


rolex   (2005-08-08 14:20:00) [12]

Также сделал. Только почти методом тыка.
Блин, откуда у вас такая логика?!


rolex   (2005-08-08 14:18:00) [13]

Всем Спасибо. Сам разобрался. Даже не думал, что всё так просто.


IceBeerg   (2005-08-08 14:18:00) [14]

alex-drob ©   (08.08.05 14:16) [2]
Да, не до смотрел...


alex-drob   (2005-08-08 14:16:00) [15]


> IceBeerg ©   (08.08.05 14:14) [1]


и s := copy(s,iPosComma + 1,Length(s));
на s := copy(s,iPosComma + 2,Length(s));


IceBeerg   (2005-08-08 14:14:00) [16]

А while pos('&$',s) > 0 do
  Begin
  iPosComma := pos('&$',s);
пробовал?


Наверх

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