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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2009, 22:24   #1
Angel G G
 
Аватар для Angel G G
 
Регистрация: 26.12.2009
Сообщений: 4
По умолчанию Символьные строки (Delphi)

Здравствуйте! Подскажите, пожалуйста.
В тексте, состоящем из строк вида "иванов и.и.1945инженер5детей" вставить недостающие пробелы для удобства.
Я сделала, чтобы отсутствовали пробелы перед знаками препинания, и присутствовали после них. Как разделить пробелами слова и числа???
Код:
type
  arofstr = array of string;
var
  f: TextFile;
  fm : string;
  i: integer;
  Strings:arofstr;

procedure Obrabotka(var Strings: arofstr);
var i:integer;
begin
 for i:=0 to length(Strings)-1 do
  begin
    Strings[i]:= Trim(Strings[i])+ ' ';

    Strings[i]:= StringReplace(Strings[i], ' .', '.', [rfReplaceAll]);
    Strings[i]:= StringReplace(Strings[i], ' ,', ',', [rfReplaceAll]);
    Strings[i]:= StringReplace(Strings[i], ' :', ':', [rfReplaceAll]);
    Strings[i]:= StringReplace(Strings[i], ' ;', ';', [rfReplaceAll]);

    Strings[i]:= StringReplace(Strings[i], '.', '. ', [rfReplaceAll]);
    Strings[i]:= StringReplace(Strings[i], ',', ', ', [rfReplaceAll]);
    Strings[i]:= StringReplace(Strings[i], ';', '; ', [rfReplaceAll]);
    Strings[i]:= StringReplace(Strings[i], ':', ': ', [rfReplaceAll]);

    Strings[i]:= StringReplace(Strings[i], '  ', ' ', [rfReplaceAll]);
  end;
end;

begin
  Write(Oem('Введите имя текстового файла...'));
  ReadLn(fm);
  WriteLn;

  AssignFile(f,fm);
  {$I-}
  Reset(f);
  if not(IOresult=0) then
  begin
    WriteLn(Oem('Ошибка при открытии файла...'));
    WriteLn(Oem('Нажмите любую клавишу для завершения программы...'));
    ReadKey;
    Halt;
  end;

  i:=0;
  while not eof(f) do
  begin
    ReadLn(f);
    i:=i+1;
  end;
  Close(f);

  SetLength(Strings,i);
  i:=0;
  Reset(f);

  while not eof(f) do
  begin
    ReadLn(f, Strings[i]);
    WriteLn(Strings[i]);
    i:=i+1;
  end;
  CloseFile(f);
  {$I+}

  WriteLn;
  Writeln(Oem('Обработанный текст:'));


  Obrabotka(Strings);

  for i:=0 to length(Strings)-1 do
  WriteLn(Strings[i]);

  WriteLn;
  WriteLn(Oem('Спасибо за использование программы!'));
  Readkey;

end.
Angel G G вне форума Ответить с цитированием
Старый 26.12.2009, 22:48   #2
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

если слова каждый раз разные то слова от слов ни как а вот цифры можно
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]

Последний раз редактировалось Volt; 26.12.2009 в 23:18.
Volt вне форума Ответить с цитированием
Старый 26.12.2009, 23:04   #3
Сид
Пользователь
 
Аватар для Сид
 
Регистрация: 07.04.2009
Сообщений: 12
По умолчанию

Отслеживать переход с текста на числа и обратно. Вставлять в эти места пробелы.
Учение-жесть,но без него никуда!
Сид вне форума Ответить с цитированием
Старый 26.12.2009, 23:11   #4
Angel G G
 
Аватар для Angel G G
 
Регистрация: 26.12.2009
Сообщений: 4
По умолчанию

Сид, а как это сделать?
Angel G G вне форума Ответить с цитированием
Старый 26.12.2009, 23:14   #5
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

ну что то типа этого
Код:
var s:string; i:integer;
begin
s:='р1у';
i:=2;
if (s[i+1]  in ['А'..'Б','а'..'б']) then insert(' ', s, i+1);
if (s[i-1]  in ['А'..'Б','а'..'б']) then insert(' ', s, i);
end;
т.е если s[i] число и если перед ним s[i+1] не число а буква то вставляем пробел аналогично перед ним
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]

Последний раз редактировалось Volt; 26.12.2009 в 23:32.
Volt вне форума Ответить с цитированием
Старый 26.12.2009, 23:35   #6
Angel G G
 
Аватар для Angel G G
 
Регистрация: 26.12.2009
Сообщений: 4
По умолчанию

Спасибо за помощь!
Но... Наверное не суждено мне справиться с этой задачей... Не получается
Angel G G вне форума Ответить с цитированием
Старый 26.12.2009, 23:52   #7
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Volt Посмотреть сообщение
ну что то типа этого
Код:
var s:string; i:integer;
begin
s:='р1у';
i:=2;
if (s[i+1]  in ['А'..'Б','а'..'б']) then insert(' ', s, i+1);
if (s[i-1]  in ['А'..'Б','а'..'б']) then insert(' ', s, i);
end;
т.е если s[i] число и если перед ним s[i+1] не число а буква то вставляем пробел аналогично перед ним
)) А для примера приведенным ТС этот код поставит пробелы между каждой буквой

Вот мой вариант (вставка пробелов в строке S) если шаблон будет одинаковый, т.е. такой какой привели Вы.
Код:
procedure Processing(var S: String);
var
  i:  Integer;
begin
  for i := 1 to Length(S) do
    if ((s[i] in ['0'..'9']) and not (s[i+1] in ['0'..'9'])) or 
       (not (s[i] in ['0'..'9']) and (s[i+1] in ['0'..'9'])) then
       Insert(#32, S, i+1);
end;
P.S. писал сюда, могут быть ошибки
psycho-coder вне форума Ответить с цитированием
Старый 27.12.2009, 00:01   #8
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var stroka:string; i:integer;

procedure addprobel;
begin
inc(i);
if (stroka[i] in ['0'..'9']) then
begin
if (stroka[i+1]  in ['A'..'Z','a'..'z','А'..'Я','а'..'я']) then insert(' ', stroka, i+1);
if (stroka[i-1]  in ['A'..'Z','a'..'z','А'..'Я','а'..'я]) then insert(' ', stroka, i);
end;
if i<=length(stroka) then   addprobel;
end;

begin
stroka:=Edit1.Text;
i:=0;
addprobel;
showmessage(stroka);
end;
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 27.12.2009, 19:54   #9
Angel G G
 
Аватар для Angel G G
 
Регистрация: 26.12.2009
Сообщений: 4
По умолчанию

Спасибо Вам большое, смысл уловила!
Выдает ошибку о несоответствии типов. Так что я еще посижу с этой задачей....
Angel G G вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символьные массивы и строки. kGxDD Паскаль, Turbo Pascal, PascalABC.NET 1 24.04.2009 11:39
Символьные строки в "Си" Starmid Помощь студентам 1 30.05.2008 09:13
Массивы символов (строки) символьные файлы. anarchist Помощь студентам 2 24.12.2007 09:16
Паскаль. задача на символьные массивы и строки zaraza21 Помощь студентам 1 03.11.2007 19:33