powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сложить непустые строки через запятую
22 сообщений из 22, страница 1 из 1
Сложить непустые строки через запятую
    #40128116
shmelina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Есть ли простой способ сложить непустые строки через запятую, чтобы не писать такую функцию?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function AddStr(str: array of string): string;
begin
  var s: string;
  for s in str do
    if s <> '' then
    begin
      if Result <> '' then
        Result := Result + ',';
      Result := Result + s;
    end;
end;
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128117
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по предыдущему топику, массив не нужен, внешний цикл тоже, строки можно складывать непосредственно при получении из запроса.
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128119
shmelina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Судя по предыдущему топику

Это другая задача.
Нужно передать на сервер (php+mysql) файлы и несколько электронных адресов. Там будут искаться клиенты по этим адресам и к ним будут подшиваться файлы.
Я понимаю, что ничего страшного не будет если параметр будет с пустыми адресами, например такой: '111@mail.ru,,222@mail.ru'. Т.е. второй адрес не указан.
Php в состоянии справится с этой задачей, но хотелось бы, чтобы было красиво и не было пустых электронных адресов.
Вопрос в том, есть ли в дельфи нужные функции или возможности, чтобы проще и короче сделать этот код.
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128120
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
String.Split?
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128122
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shmelina

'111@mail.ru,,222@mail.ru'. Т.е. второй адрес не указан.
...
хотелось бы, чтобы было красиво и не было пустых электронных адресов.


AnsiReplaceStr(sAddress, ',,', ',')?
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128123
shmelina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код, вызывающий эту функцию выглядит так:
Код: pascal
1.
2.
3.
4.
5.
Emails := AddStr([
  DMod.SQLR.FieldByName('field1').AsString,
  DMod.SQLR.FieldByName('field2').AsString,
  DMod.SQLR.FieldByName('field3').AsString,
  DMod.SQLR.FieldByName('field4').AsString]);


Т.е. нужно собрать непустые строки через запятую.
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128124
shmelina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,
Я думал об этом. Но запятая может быть и в конце и в начале. Или вообще одна.
',111@mail.ru'
'111@mail.ru,'
','
Это снова Replace, проверки и все такое.
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128125
shmelina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck
String.Split?

Изучал. А как там не добавлять пустые строки?
Было бы здорово, если была бы возможность складывать строки по условию.
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128127
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shmelina,

а где ты берешь массив?
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128128
shmelina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

у меня есть 4 электронных адреса, которые я беру из БД. См. выше.
Мне нужно эти адреса сложить в одну сроку через запятую.
Я решил создать отдельную функцию, в которую передаю массив срок и делаю там что нужно.
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128129
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shmelina

Это снова Replace, проверки и все такое.


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
var
  iCount: Integer;

  sFName: string;

  sAddress: string;

begin
  sAddress := '';

  for iCount := 1 to 4 do
    begin
      sFName := Format('field%d', [iCount]);

      if sAddress = '' then
        sAddress := FieldByName(sFName).AsString

      else
        sAddress := Concat(sAddress, ',', FieldByName(sFName).AsString);

    end;

  sAddress := AnsiReplaceStr(sAddress, ',,', ',,');

end;



Писал по памяти. Не проверял.
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128131
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю чем тебя твоя функция не устраивает.


А я вот часто вот так предпочитаю:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure AddStr(var Str: string; const Str2: string; const Delimeter: string=''); 
begin
  if length(Str2)=0 then Exit;
  if (Str<>'') and (Delimeter<>'') then begin
    Str:=Str+Delimeter+Str2;
  end else begin
    Str:=Str+Str2;
  end;
end;
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128137
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Join
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128138
shmelina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Не знаю чем тебя твоя функция не устраивает

К своему стыду я не так давно узнал про join и split. Оказалось это очень удобные помощники. Я подумал, а может еще что-то есть удобное для этой задачи. Но видимо нет.
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128141
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shmelinaЯ решил создать отдельную функцию, в которую передаю массив срок и делаю там что
нужно.

Сам решил - сам и отдувайся теперь.

Функцию ты бы написал быстрее, чем этот топик...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128148
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck
String.Split?
Это наоборот
Fr0sT-Brutal
Join
Пустые строки не выбросит

shmelina,

Я бы решал так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function AddStr(str: array of string): string;
const
  CSep = ',';
var
  LBld: TStringBuilder;
  s: string;
begin
  LBld := TStringBuilder.Create;
  try
    for s in str do begin
      if s <> '' then
        LBld.Append(s).Append(CSep);
    end;
    if LBld.Length > 0 then
      LBld.Length := LBld.Length - Length(CSep);
    Result := LBld.ToString;
  finally
    LBld.Free;
  end;
end;
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128152
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shmelina
ъъъъъ,

у меня есть 4 электронных адреса, которые я беру из БД. См. выше.
Мне нужно эти адреса сложить в одну сроку через запятую.
Я решил создать отдельную функцию, в которую передаю массив срок и делаю там что нужно.



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function catch_22(src: array of string): string;
var s: string;
begin
  result := '';
  for s in src do
    if length(s) > 0 then begin
      if length(result) > 0 then
        result := result + ',';
      result := result + s;
    end;
end;

const
  a1 = 'mail.ru';
  a2 = 'mail.ya.ru';
  a3 = 'gmail.com';
  a4 = 'yachoo.com';
begin
  writeln(catch_22([a1, a2, a3, '', a4, 'rambler.ru', '']));
  readln
end.


...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128180
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Пустые строки не выбросит

Не умеет? Я просто не в курсе насчет RTL реализации - на своей версии сижу, с го и гейшами
ъъъъъ

Код: pascal
1.
2.
    if length(s) > 0 then begin
      if length(result) > 0 then



А в чем цимес length(s) > 0 над человеческим s <> '' ?
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128187
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
Не умеет?
Нет
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
class function TStringHelper.Join(const Separator: string; const Values: array of string): string;
begin
  Result := Join(Separator, Values, 0, System.Length(Values));
end;

class function TStringHelper.Join(const Separator: string; const Values: array of string; StartIndex,
  Count: Integer): string;
var
  I: Integer;
  Max: Integer;
begin
  if (Count = 0) or ((System.Length(Values) = 0) and (StartIndex = 0)) then
    Result := ''
  else
  begin
    if (Count < 0) or (StartIndex >= System.Length(Values)) then
      raise ERangeError.CreateRes(@SRangeError);

    if (StartIndex + Count) > System.Length(Values) then
      Max := System.Length(Values)
    else
      Max := StartIndex + Count;

    Result := Values[StartIndex];
    for I:= StartIndex + 1 to Max - 1 do
      Result := Result + Separator + Values[I];
  end;
end;

...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128195
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
const перед массивом народ принципиально не ставит?
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128226
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
white_nigger
const перед массивом народ принципиально не ставит?

ага, расп3.14здяи...
...
Рейтинг: 0 / 0
Сложить непустые строки через запятую
    #40128333
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
shmelina
Код, вызывающий эту функцию выглядит так:
Код: pascal
1.
2.
3.
4.
5.
Emails := AddStr([
  DMod.SQLR.FieldByName('field1').AsString,
  DMod.SQLR.FieldByName('field2').AsString,
  DMod.SQLR.FieldByName('field3').AsString,
  DMod.SQLR.FieldByName('field4').AsString]);



Т.е. нужно собрать непустые строки через запятую.


а сразу в SQL запросе что мешает сложить, и вернуть уже готовую строку ?
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сложить непустые строки через запятую
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]