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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.04.2010, 00:22
rem2010 rem2010 вне форума
Прохожий
 
Регистрация: 27.04.2010
Сообщения: 4
Репутация: 10
По умолчанию Работа с текстовым файлом

Задание:
Текстовый файл содержит текст на естественном языке.
Словом считается:
- последовательность подряд идущих букв или цифр;
- знак препинания (считается отдельным "словом");
- знак-разделитель, например, пробел (считается отдельным "словом").
Программа должна:
- построить словарь, в котором в алфавитном порядке упорядочены все встретившиеся слова (повторяющиеся слова дважды в словарь не включаются);
- сосчитать количество повторений каждого слова;
- сохранить файл словаря в текстовом формате, включая количество повторений.

Но что-то уже на начальном этапе траблы
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
openD: TOpenDialog;
list: TStringList;
begin
list:= TStringList.Create;
list.Sort;
openD := TOpenDialog.Create(nil);
openD.Filter := 'тесктовый файл|*.txt';
if openD.Execute then
begin
list.LoadFromFile(openD.FileName);
end;
list.Sorted := True;
list.Duplicates := dupIgnore;
List.SaveToFile('словарь.txt');
end;
Admin: Пользуемся тегами!

Нужна помощь профи

Последний раз редактировалось Admin, 27.04.2010 в 09:37.
Ответить с цитированием
  #2  
Старый 27.04.2010, 06:52
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

И что? Не сортирует? Вообще интересно как отсортировать запятую, тире, точку? Что должно быть раньше? Ну а в список надо бы отдельные слова вставлять. Т.е. Надо перебирать по символам целый файл. Код предоставить не могу. Без компа.
__________________
APPLICATION.TERMINATOR

Последний раз редактировалось Ama, 27.04.2010 в 06:58.
Ответить с цитированием
  #3  
Старый 27.04.2010, 08:02
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Класная задачка мне понравилось пришлось попаритца но все же решил
Вот код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, sButton, sDialogs;

type
  TForm1 = class(TForm)
    sButton1: TsButton;
    procedure sButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
a,b:set of char;

procedure dod(list:TstringList;s:string);
 begin
  if list.IndexOfname(s)=-1 then list.Add(s+'=1')
                            else list.Values[s]:=inttostr(strtoint(list.Values[s])+1);

 end;

procedure TForm1.sButton1Click(Sender: TObject);
var
 sOpenDialog1: TOpenDialog;
 income,list:TstringList;
 i,j,x1,x2:integer;
 k:string;

begin
 sOpenDialog1 := TOpenDialog.Create(nil);
 sOpenDialog1.Filter := 'òåñêòîâûé ôàéë|*.txt';
 income:=TstringList.Create;
 list:=TstringList.Create;
 a:=['0'..'9','A'..'Z','a'..'z','À'..'ï','ð'..'ÿ'];
 b:=['!'..'/',':'..'@','\'..#39];
 if not sopenDialog1.Execute then exit;
 income.LoadFromFile(SopenDialog1.FileName);
 for i:=0 to income.Count-1 do
  begin
  k:='';
  for j:=2 to length(income[i]) do
   begin
     x1:=2;
     x2:=2;
     if income[i][j-1]=' ' then x1:=0;
     if income[i][j-1]in A then x1:=1;
     if income[i][j-1]in B then x1:=2;
     if income[i][j]=' ' then x2:=0;
     if income[i][j]in A then x2:=1;
     if income[i][j]in B then x2:=2;
     if x1<>x2 then
      begin
      if j=length(income[i]) then
        begin
         k:=k+income[i][j-1];
         dod(list,k);
         dod(list,income[i][j]);
         break;
        end;
       k:=k+income[i][j-1];
       dod(list,k);
       k:='';
      end
       else
      k:=k+income[i][j-1];
   end;
   end;
 list.Sort;
 list.SaveToFile(SopenDialog1.FileName);
 income.Free;
 list.Free;
 sOpenDialog1.Free;
 close;

end;

end.
Результат сохраняется в тот же файл
__________________
Не твори зла, и жизнь повернется к тебе передом

Последний раз редактировалось Bars1992, 27.04.2010 в 11:04.
Ответить с цитированием
  #4  
Старый 27.04.2010, 11:40
rem2010 rem2010 вне форума
Прохожий
 
Регистрация: 27.04.2010
Сообщения: 4
Репутация: 10
По умолчанию Огромное спасибо! респект и уважуха :)

Еще один вопросик
как сделать так что бы при выборе диалогового окна он отображал папку где находится программа а не "мои документы"?
Ответить с цитированием
  #5  
Старый 27.04.2010, 11:52
rem2010 rem2010 вне форума
Прохожий
 
Регистрация: 27.04.2010
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от rem2010
Еще один вопросик
как сделать так что бы при выборе диалогового окна он отображал папку где находится программа а не "мои документы"?
Сделал сам (ну хоть что-то могу)
Код:
sOpenDialog1.InitialDir := GetCurrentDir;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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