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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2011, 13:16   #1
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию Структура строки

Доброе время суток!

Объясните мне в чем я гоню!
Есть строка, нужно прочесть допустим 3 первых слова и то, что осталось. Я решил прочитать строку по буквам ищу пробелы, тем самым разделяя слова в строке (я всегда думал, что для строки s[i] это буква этой строки) и вроде бы все нормально если выводить это все в Edit-ы, за исключением 2-х левых символов в конце строки. Но стоит вывести это в RichEdit то результат поражает воображение.

Вот код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 S, Word_1, Word_2, Word_3, Other_4 :String;
                     Len, i, number :integer;

begin
 Word_1 := '';
 Word_2 := '';
 Word_3 := '';
Other_4 := '';
number := 1;

S:=RichEdit1.Text; // В нем эта строка: 1111111 2222222 333333 444444 5555 6666 7777 8888 9999 aa ## @@
Len:=Length(s);

for i:=1 to Len do
begin
case number of
  1: if S[i]<>' ' then
      Word_1:=Word_1+S[i]
     else
     inc(number);
  2: if S[i]<>' ' then
      Word_2:=Word_2+S[i]
     else
     inc(number);
  3: if S[i]<>' ' then
      Word_3:=Word_3+S[i]
     else
     inc(number);
  4: Other_4:=Other_4+S[i];

end;

Edit1.Text:=Word_1;
Edit2.Text:=Word_2;
Edit3.Text:=Word_3;
Edit4.Text:=Other_4;
RichEdit2.Lines.Add(Edit1.Text);
RichEdit2.Lines.Add(Edit2.Text);
RichEdit2.Lines.Add(Edit3.Text);
RichEdit2.Lines.Add(Edit4.Text);
end;
end;
Вот результат выводимый RichEdit-ом:
Код:
RichEdit2
1



11



111



1111



11111



111111



1111111



1111111



1111111
2


1111111
22


1111111
222


1111111
2222


1111111
22222


1111111
222222


1111111
2222222


1111111
2222222


1111111
2222222
3

1111111
2222222
33

1111111
2222222
333

1111111
2222222
3333

1111111
2222222
33333

1111111
2222222
333333

1111111
2222222
333333

1111111
2222222
333333
4
1111111
2222222
333333
44
1111111
2222222
333333
444
1111111
2222222
333333
4444
1111111
2222222
333333
44444
1111111
2222222
333333
444444
1111111
2222222
333333
444444 
1111111
2222222
333333
444444 5
1111111
2222222
333333
444444 55
1111111
2222222
333333
444444 555
1111111
2222222
333333
444444 5555
1111111
2222222
333333
444444 5555 
1111111
2222222
333333
444444 5555 6
1111111
2222222
333333
444444 5555 66
1111111
2222222
333333
444444 5555 666
1111111
2222222
333333
444444 5555 6666
1111111
2222222
333333
444444 5555 6666 
1111111
2222222
333333
444444 5555 6666 7
1111111
2222222
333333
444444 5555 6666 77
1111111
2222222
333333
444444 5555 6666 777
1111111
2222222
333333
444444 5555 6666 7777
1111111
2222222
333333
444444 5555 6666 7777 
1111111
2222222
333333
444444 5555 6666 7777 8
1111111
2222222
333333
444444 5555 6666 7777 88
1111111
2222222
333333
444444 5555 6666 7777 888
1111111
2222222
333333
444444 5555 6666 7777 8888
1111111
2222222
333333
444444 5555 6666 7777 8888 
1111111
2222222
333333
444444 5555 6666 7777 8888 9
1111111
2222222
333333
444444 5555 6666 7777 8888 99
1111111
2222222
333333
444444 5555 6666 7777 8888 999
1111111
2222222
333333
444444 5555 6666 7777 8888 9999
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 a
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 aa
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 aa 
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 aa #
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 aa ##
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 aa ## 
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 aa ## @
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 aa ## @@
1111111
2222222
333333
444444 5555 6666 7777 8888 9999 aa ## @@

1111111
2222222
333333
444444 5555 6666 7777 8888 9999 aa ## @@

Последний раз редактировалось Replicant; 17.03.2011 в 13:20.
Replicant вне форума Ответить с цитированием
Старый 17.03.2011, 13:25   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://programmersforum.ru/showthread.php?t=49445
посмотрите, думаю ваш случай.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.03.2011, 13:26   #3
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Не я чёт не понимаю, чему вы удивляетесь?
Вот так измените код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 S, Word_1, Word_2, Word_3, Other_4 :String;
                     Len, i, number :integer;

begin
 Word_1 := '';
 Word_2 := '';
 Word_3 := '';
Other_4 := '';
number := 1;

S:=RichEdit1.Text; // В нем эта строка: 1111111 2222222 333333 444444 5555 6666 7777 8888 9999 aa ## @@
Len:=Length(s);

for i:=1 to Len do
begin
case number of
  1: if S[i]<>' ' then
      Word_1:=Word_1+S[i]
     else
     inc(number);
  2: if S[i]<>' ' then
      Word_2:=Word_2+S[i]
     else
     inc(number);
  3: if S[i]<>' ' then
      Word_3:=Word_3+S[i]
     else
     inc(number);
  4: Other_4:=Other_4+S[i];

end;
end;//Вот про него то вы и забыли
Edit1.Text:=Word_1;
Edit2.Text:=Word_2;
Edit3.Text:=Word_3;
Edit4.Text:=Other_4;
RichEdit2.Lines.Add(Edit1.Text);
RichEdit2.Lines.Add(Edit2.Text);
RichEdit2.Lines.Add(Edit3.Text);
RichEdit2.Lines.Add(Edit4.Text);
end;
И да
Цитата:
я всегда думал, что для строки s[i] это буква этой строки
Вообще-то это так!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 17.03.2011, 13:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не понял, что поразило воображение? Что засунули в RichEdit, то оно и выдало. В цикле от 1 до длины строки добавляете в него по 4 строчки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.03.2011, 13:35   #5
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию

Спасибо, самому порой трудно заметить собственную глупость!
Но почему в четвертый эдит в конец строки выводится 2 левых символа (две жирные вертикальные черточки)?
Replicant вне форума Ответить с цитированием
Старый 17.03.2011, 14:03   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

S:=RichEdit1.Text - запросто в конце символы перевода каретки и строки, RichEdit их не отображает (форматирует текст согласно этих символов, у вас там не зря в концовке пустая строка появилась), а TEdit отображает как |
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.03.2011, 15:47   #7
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Код:
if Pos(' ',text) > 0 then begin
	S1:=Copy(text,1,Pos(' ',text) -1 );
	Delete(text,1,Pos(' ',text);
end;
if Pos(' ',text) > 0 then begin
	S2:=Copy(text,1,Pos(' ',text) -1 );
	Delete(text,1,Pos(' ',text);
end;
if Pos(' ',text) > 0 then begin
	S3:=Copy(text,1,Pos(' ',text) -1 );
	Delete(text,1,Pos(' ',text);
end;
S4:=text;
думаю, суть понятна... старайтесь применять не те варианты, которые универсальны, а те, которые подойдут строго под задачу.
если планируется просто куда-то дабавлять эти строки - то можно всё это занести в цикл для компактности кода.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
структура в С 4eburator Помощь студентам 3 13.10.2010 18:16
Структура DRELORD Помощь студентам 0 16.05.2010 22:53
Структура Superlotles Помощь студентам 5 14.09.2009 23:29
структура Cpluser Общие вопросы C/C++ 4 16.06.2009 17:42
Структура SL1CK Общие вопросы C/C++ 8 08.06.2009 21:31