Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Bookkc1
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 780
1

Разбить строку в разные переменные

14.12.2016, 20:32. Просмотров 459. Ответов 27
Метки нет (Все метки)

Есть в переменной такой текст


text:= 'aaa1bbb';

Нужно взять из этой переменной все что находится до символа 1 и занести в переменную first и взять всё что находится после символа 1 и занести в переменную second

Думаю понятно что мне нужно. Прошу помощи, натолкните как это сделать, очень прошу
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2016, 20:32
Ответы с готовыми решениями:

Можно ли в две разные переменные одновременно записывать одно и тоже значение?
Привет всем. Подскажите пожалуйста, можно ли в две разные переменные...

Разбить строку
Пример строки: 012313_131232,231234_1235122,1237843_945345 и таких пар может...

Разбить строку на подстроки
Нужен пример кода. Задание: Программа в консольном виде. Имеется переменная...

Разбить на части строку
Доброго времени суток! Помогите с простенькой задачкой пожалуйста! Нужно взять...

Разбить строку на подстроки
Здравствуйте, есть строка в StringList: 1@3@7@4 Как сделать, чтобы в этом...

27
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
14.12.2016, 20:37 2
Bookkc1,
Delphi
1
2
3
text:='aaa1bbb';
first:=copy(text,0,pos('1',text)-1);
second:=copy(text,pos('1',text)+1,length(text));
1
krapotkin
3479 / 3073 / 1061
Регистрация: 14.04.2014
Сообщений: 14,862
Записей в блоге: 15
14.12.2016, 20:42 3
для начинающих лучше одна строка - одно действие, иначе в голове ничего не добавляется )
0
Bookkc1
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 780
18.12.2016, 13:33  [ТС] 4
cfbogd спасибо, твой код прекрасно работает, но теперь вопрос, как сделать что бы разбивало на 3 переменные, например:

text:= 'aaa1bbb1ссс';

в переменной third: хранились "ссс", уж очень нужно.

Как работает твой кусок кода я понял, а как разбить на 3 переменные - не пойму.
0
krapotkin
3479 / 3073 / 1061
Регистрация: 14.04.2014
Сообщений: 14,862
Записей в блоге: 15
18.12.2016, 14:01 5
тадааам ))
еще и дня не прошло а уже прав ))))

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var p:integer;
s:string;
res:array[0..2] of string;
 
p:=pos('1',s);
res[0]:=copy(s,1,p-1);
delete(s,p);
 
p:=pos('1',s);
res[1]:=copy(s,1,p-1);
delete(s,p);
 
res[2] := s;
1
Bookkc1
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 780
18.12.2016, 14:54  [ТС] 6
а внести правки в код cfbogd никак ? он мне намного удобней

Добавлено через 1 минуту
[Error] Unit1.pas(31): Undeclared identifier: 'res'
0
krapotkin
3479 / 3073 / 1061
Регистрация: 14.04.2014
Сообщений: 14,862
Записей в блоге: 15
18.12.2016, 14:58 7
так вносите
не знаю, кто может вам и верит
Цитата Сообщение от Bookkc1 Посмотреть сообщение
кусок кода я понял, а как разбить на 3 переменные - не пойму.
я - нет
если понял, то по аналогии сделать не просто а очень просто
0
Bookkc1
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 780
18.12.2016, 15:05  [ТС] 8
понять понял, а сделать не могу понять как ) поэтому прошу и помощи...
0
krapotkin
3479 / 3073 / 1061
Регистрация: 14.04.2014
Сообщений: 14,862
Записей в блоге: 15
18.12.2016, 15:07 9
я привел полный код, который разносит вашу строку в три элемента массива
что еще надо?
0
Bookkc1
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 780
18.12.2016, 15:08  [ТС] 10
Delphi
1
2
3
delete(s,p);
 
[Error] Unit1.pas(35): Not enough actual parameters
Добавлено через 23 секунды
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var p:integer;
s:string;
 
 
res:array[0..2] of string;
begin
p:=pos('1',s);
res[0]:=copy(s,1,p-1);
delete(s,p);
 
p:=pos('1',s);
res[1]:=copy(s,1,p-1);
delete(s,p);
 
res[2] := s;
end;
0
Hikari
Хитрая блондиночка $)
1451 / 964 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
18.12.2016, 15:09 11
Цитата Сообщение от Bookkc1 Посмотреть сообщение
Нужно взять из этой переменной все что находится до символа 1 и занести в переменную first
С коленки
Delphi
1
2
3
4
5
6
7
With TStringList.Create do begin
 Delimiter:='1';
 DelinitedText:='aaa1bbb';
 if Count>0 then First:=Strings[0];
 if Count>1 then Second:=Strings[1];
 Free;
end;
0
krapotkin
3479 / 3073 / 1061
Регистрация: 14.04.2014
Сообщений: 14,862
Записей в блоге: 15
18.12.2016, 15:10 12
опс, это уже да, пропустил второй параметр
delete(s,1,p)
1
Bookkc1
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 780
18.12.2016, 15:54  [ТС] 13
Работает. спасибо

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button1Click(Sender: TObject);
var p:integer;
s:string;
res:array[0..2] of string;
begin
  s:='aaa1bbb1ccc';
p:=pos('1',s);
res[0]:=copy(s,1,p-1);
delete(s,1,p);
 
p:=pos('1',s);
res[1]:=copy(s,1,p-1);
delete(s,1,p);
 
res[2] := s;
 
ShowMessage(res[0]);
ShowMessage(res[1]);
ShowMessage(res[2]);
end;
Добавлено через 40 минут
ещё вопрос. какой тип данных ставить, если вместо 1 хочу поставить например знак -?
0
krapotkin
3479 / 3073 / 1061
Регистрация: 14.04.2014
Сообщений: 14,862
Записей в блоге: 15
18.12.2016, 16:14 14
ничего не менять
0
D1973
Модератор
3661 / 2639 / 1284
Регистрация: 21.01.2014
Сообщений: 11,180
Записей в блоге: 3
Завершенные тесты: 1
18.12.2016, 16:16 15
Цитата Сообщение от Bookkc1 Посмотреть сообщение
какой тип данных ставить, если вместо 1 хочу поставить например знак -?
как есть так и оставляй, только вместо '1' пиши '?'
Цитата Сообщение от Bookkc1 Посмотреть сообщение
как сделать что бы разбивало на 3 переменные
А если переменных будет 4, 5, 6 и т.д? Советую присмотреться к примеру, который привела Hikari, только не надо записывать каждое значение в свою переменную, обращайся к данным по индексу стринглиста.
0
Bookkc1
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 780
18.12.2016, 16:29  [ТС] 16
Да, тот пример мне понравился большое, но выводит пустое сообщение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
  First,Second,DelinitedText:string;
begin
With TStringList.Create do begin
 Delimiter:='1';
 DelinitedText:='aaa1bbb';
 if Count>0 then First:=Strings[0];
 if Count>1 then Second:=Strings[1];
 Free;
 ShowMessage(Second);
end;
end;
Почему?
0
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
18.12.2016, 16:39 17
Цитата Сообщение от Bookkc1 Посмотреть сообщение
DelinitedText:='aaa1bbb';
это все из-за коленки))))))
DelimitedText
1
Bookkc1
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 780
18.12.2016, 16:44  [ТС] 18
жесть. а я её объявил )))хахаха спасибо. работает буду юзать этот код.

Добавлено через 1 минуту
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
  First,Second:string;
begin
  With TStringList.Create do begin
 Delimiter:='1';
 DelimitedText:='aaa1bbb1ccc';
 if Count>0 then First:=Strings[0];
 if Count>1 then Second:=Strings[2];
 Free;
 ShowMessage(Second);
  end;
end;
0
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
18.12.2016, 16:46 19
Цитата Сообщение от Bookkc1 Посмотреть сообщение
if Count>0 then First:=Strings[0];
*if Count>1 then Second:=Strings[2];
в переменной second будет 3 строка
Delphi
1
2
3
 if Count>0 then First:=Strings[0];
 if Count>1 then Second:=Strings[1];
 if Count>2 then third:=Strings[2];
0
Bookkc1
3 / 3 / 0
Регистрация: 01.11.2012
Сообщений: 780
18.12.2016, 17:03  [ТС] 20
Код хороший , но работает неправильно, он пробел воспринимает почему то как Delimiter:='1';


пипец...

Добавлено через 2 минуты
если текст идет примерно такой:

aaa1bb bb1ccc

то в :

first: aaa
second: bb
Third: bb

отак

Добавлено через 2 минуты
даже больше скажу.

third получается такая bbccc

а если два и больше пробелов то всё съезжает

Добавлено через 4 минуты
насколько я понял Delimiter:='-'; и по пробелу тоже разбивает... если это так, то тогда не вариант. у меня пробелы могут быть...
0
18.12.2016, 17:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2016, 17:03

Разбить строку на слова !
Как разбить строку на подстроки ? допустим у меня есть ряд слов: Пень, лень,...

Как разбить строку?
Добрый день, есть текст в memo, нужно его разбить на слова и занести каждое...

Разбить строку на подстроки.
Есть строка типа (275906,-39,56,2,5263,'ЖЕСТЬ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru