Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Как разбить текст на отдельные слова?


Автор: SPAM 17.9.2006, 12:20
Такая ситуация. Открываю текстовый файл в поле мемо. В файле, допустим, предложение написано... как можно разбить его на отдельные слова?.. Отделить от текста пробелы. Подскажите, плиз.

Автор: Matematik 17.9.2006, 12:26
Код

const
  RusUpperChar = ['А'..'Я','Ё'];
  RusLowerChar = ['а'..'я','ё'];
  EngUpperChar = ['A'..'Z'];
  EngLowerChar = ['a'..'z'];
  NumChar      = ['0'..'9'];

  AllChar      = RusUpperChar + RusLowerChar + EngUpperChar + EngLowerChar;
  AllUpperChar = RusUpperChar + EngUpperChar;
  AllLowerChar = RusLowerChar + EngLowerChar;

  AllCharNum   = AllChar + NumChar;
  NotAllCharNum = [#0..#255] - AllCharNum;

// деление строки на слова
procedure Str2Word_(const aText:AnsiString; sl:TStrings);
begin
  ExtractStrings(NotAllCharNum, [], Pointer(aText), sl);
end;  



Автор: SPAM 17.9.2006, 12:29
Matematik, спасибо.

Автор: SPAM 17.9.2006, 12:53
Я немного не понял.
Задача у меня такая: дан файл, компоненты которого являются действительными числами. Необходимо найти сумму этих компонентов и произведение. 

Т. е. файл, который я открываю, содержит какие-либо числа... мне их нужно распознать, а потом сложить/умножить.

Я ставлю на форму поле Мемо, ОпенДиалог и кнопки: выгрузить (выгружает данные в мемо из файла), сложить и умножить.

В кнопке «Выгрузить» прописываю:
Код

// выгрузка данных
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

А вот какие действия производить дальше, не знаю. Помогите.

Автор: BUGOR 17.9.2006, 13:21
SPAM, а в каком виде числа хранятся в файле? 

PS Там где выгрузка данных, по коду, должна быть их загрузкаsmile


Matematik, а вот так не проще?

Код

var
sl: TStringList;
//i:dword;
begin
sl := TStringList.Create;
sl.Text:= StringReplace('Шла Саша по шоссе и сосала сушку', ' ', #13#10, [rfReplaceAll]);
//for i:=0 to sl.Count-1 do Memo1.Lines.Add(sl.Strings[i])

Автор: SPAM 17.9.2006, 13:24
BUGOR, файл в формате *.txt и числа в нем вписаны просто цифрами. Строковый наверное вид.
Про загрузку, правильно smile

Автор: BUGOR 17.9.2006, 14:53
SPAM, нет, я в том смысле, что они могут хранится так:
123
123
123

или так: 123 123 123

или вообще так: 123-432-444

Есть вариант с универсальным алгоритмом, т.е. числа будут выдраны независимо от разделителя и формы их хранения, но для этого нужно будет использовать регулярные выражения, если тебя это не пугает, то могу привести алгоритмsmile

Автор: SPAM 17.9.2006, 15:03
BUGOR, приведи... заранее спасибо!  smile 

Автор: BUGOR 17.9.2006, 15:39
Код
function AdditionalFile(FileName: String): integer;
var
lpData: TStringList;
exp: TRegExpr;
begin
  lpData := TStringList.Create;
  exp := TRegExpr.Create;

  lpData.LoadFromFile(FileName);
  exp.Expression := '\d+';
  Result:=0;
  if exp.Exec(lpData.Text) then begin
    Result := Result + StrToInt(exp.Match[0]);
    while exp.ExecNext do begin
      Result := Result + StrToInt(exp.Match[0]);
    end;
  end;
  lpData.Destroy;
  exp.Destroy;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage(IntToStr(AdditionalFile('C:\1.txt')));
end;


Тестил на фале такого содержания:

Цитата

123
321
112

123-32-232020
2
4
231
32
43жлваощг32083дж
3
2319032-66


Как результат видим такое сообщение:

Цитата
---------------------------
Project1
---------------------------
2584227
---------------------------
OK   
---------------------------


Что и является суммой всех чисел в этом файле. smile

Автор: SPAM 17.9.2006, 15:47
BUGOR, обьясни пожалуйста, к чему ты цеплял функцию AdditionalFile и процедуру TForm1.FormCreate. А так же куда ты делал вывод текста из файла, а потом вывод результата.

Автор: BUGOR 17.9.2006, 15:57
Функция AdditionalFile для удобства, что значит к чему FormCreate, там же написано Form1. Какой вывод тектса, вывод результата?smile

Автор: Romikgy 17.9.2006, 16:09
имхо проще заюзать StringReplace! а вообще приведи как выглядит текст , и как должен выглядеть в конце преобразования

Автор: BUGOR 17.9.2006, 16:16
Romikgy, проще в каком случае? Когда известен разделитель? Конечно, я же поэтому сначала и спросил в каком виде хранятся данные, а потом просто предложил универсальный способ.

Автор: SPAM 17.9.2006, 16:18
Цитата(BUGOR @ 17.9.2006,  21:57)
Функция AdditionalFile для удобства, что значит к чему FormCreate, там же написано Form1. Какой вывод тектса, вывод результата?

Во вложении скрин формы.
1. Поле Мемо.
2. Кнопки Умножить, Сложить и Загрузить.
3. ОпенДиалог.

Жмем кнопку ЗАГРУЗИТЬ... вылазит окно опендиалога с выбором файлов. Выбираем *.txt файл с набором цифр (пример: 13 58 999), они отображаются в поле Мемо. Потом жмем кнопку сложить/умножить и машина производит действия... после чего очищает поле Мемо и в него пишет результат.

Вот так мне надо.

Автор: Romikgy 17.9.2006, 16:41
где на этой картинке поле мемо?

Добавлено @ 16:42 
позже если никто не приведет код , я приведу

Автор: SPAM 17.9.2006, 16:43
Цитата(Romikgy @ 17.9.2006,  22:41)
где на этой картинке поле мемо?

Желтая полосочка вверху формы – это и есть компонент TMemo.

Автор: BUGOR 17.9.2006, 16:51
SPAM, ну ё-мое... рановато тебе такие штуки писать, ты самых основ не знаешь. 

Автор: Romikgy 17.9.2006, 17:06
SPAM, числа только целые или есть с плавающей точкой?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)