Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

Код:

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;

__________________
http://EdwardSoft.ucoz.ru
superedward вне форума   Ответить с цитированием
Старый 19.03.2014, 11:13   #3
northener
Профессионал
 
Регистрация: 15.07.2013
Сообщений: 1,460
Репутация: 477
По умолчанию

Код:

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
Репутация: 108
По умолчанию

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
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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
Репутация: 70
По умолчанию

Цитата:
Сообщение от XE5 Посмотреть сообщение
superedward к чему такие сложности? Всё просто и банально.
Код:

//Функция перевода строки вида "1-3,5" в массив чисел [1,2,3,5]

__________________
http://EdwardSoft.ucoz.ru
superedward вне форума   Ответить с цитированием
Старый 19.03.2014, 14:38   #7
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,613
Репутация: 5352
По умолчанию

Цитата:
Сообщение от superedward Посмотреть сообщение
Код:

//Функция перевода строки вида "1-3,5" в массив чисел [1,2,3,5]

Наверняка отличная функция.
Вот только зачем это в данном случае, когда у TC числа, разделённые запятыми?!..


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

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

Я вот делаю так, а все равно, там в массиве после всех нужных значений, появляются много лишних...
Код:

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
Репутация: 70
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


06:58.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru