Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.03.2012, 00:57
xsaven xsaven вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 9
Репутация: 10
Вопрос Как разбить правильно строку?

Подскажите пожалуйста,
Вот на пример у меня есть текст "Привет qw всем rt я робот asd Бонни"
И мне нужно что бы при нажатии на "Button1" из "Edit1"(Где и был допустим написан этот текст) перенеслось в "ListBox1" латинские символы то есть в виде:
1 - qw
2 - rt
3 - asd.

Помогите пожалуйста.
Ответить с цитированием
  #2  
Старый 27.03.2012, 01:02
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Можно поступить так, загрузить в StringList, указав в качастве разделителя пробел, затем по циклу опросить все строки StringList-а и, если в строке не присутствуют символы больше чем 'z', то копировать в Memo.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 27.03.2012, 01:03
xsaven xsaven вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 9
Репутация: 10
Смущение

А можно пожалуйста в виде кода если не сложно
Ответить с цитированием
  #4  
Старый 27.03.2012, 01:16
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Код:
  StringList.Delimiter := ' ';
  StringList.DelimitedText := "Привет qw всем rt я робот asd Бонни";

  for I := 0 to StringList.Count - 1 do
  begin
    Bol := False;
    St := StringList.Strings[i];
    for J := 1 to Length(St) do
      if St[J] > 'z' then
      begin
        Bol := True;
        Break;
      end;
    if not Bol then
      Memo1.Lines.Add(St);
  end;
Примерно так.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 27.03.2012 в 01:18.
Ответить с цитированием
  #5  
Старый 27.03.2012, 01:42
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от angvelem
Код:
  StringList.Delimiter := ' ';
  StringList.DelimitedText := "Привет qw всем rt я робот asd Бонни";

  for I := 0 to StringList.Count - 1 do
  begin
    Bol := False;
    St := StringList.Strings[i];
    for J := 1 to Length(St) do
      if St[J] > 'z' then
      begin
        Bol := True;
        Break;
      end;
    if not Bol then
      Memo1.Lines.Add(St);
  end;

Примерно так.

angvelem Код, скажу тебе, не камельфо, 2 цикла + Break непонятный) Здесь одного цикла хватит за глаза!
Ответить с цитированием
  #6  
Старый 27.03.2012, 01:48
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Конечно кака, на скорую руку писан. Break вполне понятный.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 27.03.2012, 01:52
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от angvelem
Конечно кака, на скорую руку писан.

Ну ты наверно тупо руки на клаву положил
Ответить с цитированием
  #8  
Старый 27.03.2012, 07:38
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

PHP код:
type abc set of char;

function 
no_empty_lines(strstring): string;
begin
  
while str <> StringReplace(str#13#10#13#10, #13#10, [rfReplaceAll]) do
    
str := StringReplace(str#13#10#13#10, #13#10, [rfReplaceAll]);
  
if pos(#13#10, str) = 1 then
    
str := StringReplace(str#13#10, '', []);

  
result := str;
end;

function 
get(strstringneededabc = ['a'..'z''A'..'Z']): string;
var 
iinteger;
begin
  
for := 0 to 255 do
    if 
not (char(iin neededthen
      str 
:= StringReplace(strchar(i), #13#10, [rfReplaceAll]);

  
result := no_empty_lines(str);
end;

procedure TForm1.Button1Click(SenderTObject);
begin
  ListBox1
.Items.Text := get(Edit1.Text);
end
stringreplace-ом
Ответить с цитированием
  #9  
Старый 27.03.2012, 09:23
xsaven xsaven вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 9
Репутация: 10
По умолчанию

Я чего то не могу понять я вставляю код и у меня дает ошибку ругается на "type abc = set of char;"
Ответить с цитированием
  #10  
Старый 27.03.2012, 10:22
xsaven xsaven вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 9
Репутация: 10
По умолчанию

И если можно скиньте пожалуйста наглядный примерчек..
Ответить с цитированием
  #11  
Старый 27.03.2012, 18:03
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

PHP код:
ругается на "type abc = set of char;" 
что говорит?
Ответить с цитированием
  #12  
Старый 27.03.2012, 19:38
xsaven xsaven вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 9
Репутация: 10
По умолчанию

"[Error] Unit1.pas(32): Statement expected but 'TYPE' found" - вот это
Ответить с цитированием
  #13  
Старый 28.03.2012, 07:53
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

PHP код:
unit Unit1;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsStdCtrls;

type
  TForm1 
= class(TForm)
    
Button1TButton;
    
Edit1TEdit;
    
ListBox1TListBox;
    
procedure Button1Click(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;

implementation

{$R *.dfm}

type abc set of char;

function 
no_empty_lines(strstring): string;
begin
  
while str <> StringReplace(str#13#10#13#10, #13#10, [rfReplaceAll]) do
    
str := StringReplace(str#13#10#13#10, #13#10, [rfReplaceAll]);
  
if pos(#13#10, str) = 1 then
    
str := StringReplace(str#13#10, '', []);

  
result := str;
end;

function 
get(strstringneededabc = ['a'..'z''A'..'Z']): string;
var 
iinteger;
begin
  
for := 0 to 255 do
    if 
not (char(iin neededthen
      str 
:= StringReplace(strchar(i), #13#10, [rfReplaceAll]);

  
result := no_empty_lines(str);
end;

procedure TForm1.Button1Click(SenderTObject);
begin
  ListBox1
.Items.Text := get(Edit1.Text);
end;

end
Ответить с цитированием
  #14  
Старый 28.03.2012, 21:04
xsaven xsaven вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 9
Репутация: 10
По умолчанию

а как можно в выводе в листбокс перед анг. буквами нумирацию сделать а то калупал-калупал чето не вышло (
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter