Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2014, 10:07   #1
Bane
LetTheGameBegin
Пользователь
 
Аватар для Bane
 
Регистрация: 13.03.2014
Сообщений: 34
По умолчанию Как разделить строку на отдельные элементы?

Как можно из строковой переменной, где значения записаны так: (11, 44, 1, 24, и т. д.), получить каждое кисло в отдельной ячейке массива???
Я только учусь)
Bane вне форума Ответить с цитированием
Старый 19.03.2014, 10:38   #2
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Спарсить из строки и заносить в массив

Код:
type
  TPages=array of integer;

function StrToPages(const Pages: string): TPages;
//Функция перевода строки вида "1-3,5" в массив чисел [1,2,3,5]
var iPage,iCount,iPageFrom,iPageTo: integer;
    sPages,sPage: string;
begin
 if Pages>''then sPages:=StringReplace(Pages,' ','',[])+',';
 iCount:=0;
 SetLength(Result,iCount);
 while Length(sPages)>0do begin
  sPage:=Copy(sPages,1,Pos(',',sPages)-1);
  sPages:=Copy(sPages,Pos(',',sPages)+1,255);
  iPage:=StrToIntDef(sPage,-1);
  if iPage=-1then begin
   iPageFrom:=StrToInt(Copy(sPage,1,Pos('-',sPage)-1));
   iPageTo:=StrToInt(Copy(sPage,Pos('-',sPage)+1,255));
   for iPage:=iPageFrom to iPageTo do begin
    Inc(iCount);
    SetLength(Result,iCount);
    Result[iCount-1]:=iPage
   end
  end else begin
   Inc(iCount);
   SetLength(Result,iCount);
   Result[iCount-1]:=iPage
  end
 end
end;
superedward вне форума Ответить с цитированием
Старый 19.03.2014, 11:13   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Код:
var
  StL : TStringList;
  i : Integer;
  Arr : array of Integerl
  S : string;

.......

begin
  S := '11, 44, 1, 24';
  StL := TStringList.Create;
  try
    ExtractStrings([','], [], PChar(S), StL);
    SetLength(Arr,StL.Count);
    for i := 0 to StL.Count - 1 do
      Arr[i]:=StrToInt(Trim(StL.Strings[i]));
  finally
    StL.Free;
  end;
end;

Последний раз редактировалось northener; 19.03.2014 в 11:16.
northener вне форума Ответить с цитированием
Старый 19.03.2014, 11:14   #4
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

superedward к чему такие сложности? Всё просто и банально.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var TS: TStringList;
begin
TS := TStringList.Create;
TS.DelimitedText := '11, 44, 1, 24';
ShowMessage(TS[0]);
ShowMessage(TS[1]);
end;
XE5 вне форума Ответить с цитированием
Старый 19.03.2014, 14:12   #5
Bane
LetTheGameBegin
Пользователь
 
Аватар для Bane
 
Регистрация: 13.03.2014
Сообщений: 34
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Код:
var
  StL : TStringList;
  i : Integer;
  Arr : array of Integerl
  S : string;

.......

begin
  S := '11, 44, 1, 24';
  StL := TStringList.Create;
  try
    ExtractStrings([','], [], PChar(S), StL);
    SetLength(Arr,StL.Count);
    for i := 0 to StL.Count - 1 do
      Arr[i]:=StrToInt(Trim(StL.Strings[i]));
  finally
    StL.Free;
  end;
end;
Да, все вроде правильно, но он еще лишние значения заносит мне в массив, что с этим делать?
Я только учусь)
Bane вне форума Ответить с цитированием
Старый 19.03.2014, 14:23   #6
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Цитата:
Сообщение от XE5 Посмотреть сообщение
superedward к чему такие сложности? Всё просто и банально.
Код:
//Функция перевода строки вида "1-3,5" в массив чисел [1,2,3,5]
superedward вне форума Ответить с цитированием
Старый 19.03.2014, 14:38   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от superedward Посмотреть сообщение
Код:
//Функция перевода строки вида "1-3,5" в массив чисел [1,2,3,5]
Наверняка отличная функция.
Вот только зачем это в данном случае, когда у TC числа, разделённые запятыми?!..


p.s. отвечать не обязательно, вопрос риторический...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2014, 14:45   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Bane Посмотреть сообщение
Да, все вроде правильно, но он еще лишние значения заносит мне в массив, что с этим делать?
не подтверждаю.
Приведите привер входной строки, при котором подобное происходит.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2014, 14:48   #9
Bane
LetTheGameBegin
Пользователь
 
Аватар для Bane
 
Регистрация: 13.03.2014
Сообщений: 34
По умолчанию

Я вот делаю так, а все равно, там в массиве после всех нужных значений, появляются много лишних...
Код:
procedure TForm7.Button5Click(Sender: TObject);
var
    StL: TStringList;
    sosIng, a, b, c: string;
    i: integer;
    masIng: array of integer;
begin
  sosIng:=Form6.DBGrid1.DataSource.DataSet.FieldByName('IndehIng').AsString;
  StL:= TStringList.Create;
  try
    ExtractStrings([','], [' '], PChar(sosIng), StL);
    SetLength(masIng,StL.Count);
    for i := 0 to StL.Count-1 do
      masIng[i]:=StrToInt(Trim(StL.Strings[i]));
  finally
    StL.Free;
  end;
Я только учусь)
Bane вне форума Ответить с цитированием
Старый 19.03.2014, 15:17   #10
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Наверняка отличная функция.
Вот только зачем это в данном случае, когда у TC числа, разделённые запятыми?!..
Просто это уже была готовая функция, в качестве подзадачи решающая и задачу ТС. А дальше у ТС свободный выбор, с какого из предложенных решений отталкиваться для решения своей задачи ))
superedward вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разделить строчку на элементы? celovec Общие вопросы Delphi 3 18.03.2011 14:40
Разделить строку DKENT Общие вопросы Delphi 6 12.02.2011 02:04
Разделить строку данных на отдельные числа juggle Общие вопросы Delphi 5 05.02.2011 23:17
1.Найти в матрице первую строку, все элементы которой отрицательны 2.отсортировать элементы массива по в w0lf16 Помощь студентам 2 22.11.2009 15:47
как разделить строку даты student90 Общие вопросы Delphi 16 07.11.2008 10:01