Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Как разбить текст на отдельные слова? TOpenDialog, TMemo 
V
    Опции темы
SPAM
Дата 17.9.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.9.2006
Где: Россия, г. Чита

Репутация: нет
Всего: нет



Такая ситуация. Открываю текстовый файл в поле мемо. В файле, допустим, предложение написано... как можно разбить его на отдельные слова?.. Отделить от текста пробелы. Подскажите, плиз.
PM MAIL WWW ICQ   Вверх
Matematik
Дата 17.9.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 1
Всего: 50



Код

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;  



PM MAIL WWW ICQ   Вверх
SPAM
Дата 17.9.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.9.2006
Где: Россия, г. Чита

Репутация: нет
Всего: нет



Matematik, спасибо.
PM MAIL WWW ICQ   Вверх
SPAM
Дата 17.9.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.9.2006
Где: Россия, г. Чита

Репутация: нет
Всего: нет



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

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

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

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

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

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


Это сообщение отредактировал(а) SPAM - 17.9.2006, 12:54

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  form1_picture.jpg 71,04 Kb
PM MAIL WWW ICQ   Вверх
BUGOR
Дата 17.9.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: нет
Всего: 16



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])



--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
SPAM
Дата 17.9.2006, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.9.2006
Где: Россия, г. Чита

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) SPAM - 17.9.2006, 13:25
PM MAIL WWW ICQ   Вверх
BUGOR
Дата 17.9.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: нет
Всего: 16



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

или так: 123 123 123

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

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


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
SPAM
Дата 17.9.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.9.2006
Где: Россия, г. Чита

Репутация: нет
Всего: нет



BUGOR, приведи... заранее спасибо!  smile 
PM MAIL WWW ICQ   Вверх
BUGOR
Дата 17.9.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: нет
Всего: 16



Код
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


Это сообщение отредактировал(а) BUGOR - 17.9.2006, 15:41


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
SPAM
Дата 17.9.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.9.2006
Где: Россия, г. Чита

Репутация: нет
Всего: нет



BUGOR, обьясни пожалуйста, к чему ты цеплял функцию AdditionalFile и процедуру TForm1.FormCreate. А так же куда ты делал вывод текста из файла, а потом вывод результата.
PM MAIL WWW ICQ   Вверх
BUGOR
Дата 17.9.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: нет
Всего: 16



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


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 17.9.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 9
Всего: 146



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


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
BUGOR
Дата 17.9.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: нет
Всего: 16



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


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
SPAM
Дата 17.9.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.9.2006
Где: Россия, г. Чита

Репутация: нет
Всего: нет



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

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

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

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

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  form.jpg 44,65 Kb
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 17.9.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 9
Всего: 146



где на этой картинке поле мемо?

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


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0904 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.