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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2010, 20:21   #1
Яська
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 50
По умолчанию Работа с файлами Delphi

Задание:Даны фамилия, имя, отчество. Вывести на экран инициалы.

подскажите,пожалуйста,где тут ошибка.Выводит всего лишь первые инициалы

Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
 var
  FIO:string;   Str: string;
  FN:array [1..6] of string;
  i,Probel:Integer;
  masFIO:array[1..3] of string;
begin
 FIO:='';
 Probel:=1;
 for I:=1 to Length(FIO) do
 begin
 if (FIO[i]=' ') and (FIO[i+1]<> ' ') then Probel:=Probel+1;
  if FIO[i]<>' '  then
  begin
  if Probel=1 then masFIO[1]:= masFIO[1]+Fio[I];
  if Probel=2 then masFIO[2]:= masFIO[2]+Fio[I];
  if Probel=3 then masFIO[3]:= masFIO[3]+Fio[I];
  end;
 end;
  FN[i]:='';{получили массив содержащий слова из строки FIO.}
  Str:=masFIO[1]+' '+ masFIO[2][1]+'. ' +masFIO[3][1]+'.';
Memo2.Lines.Add(FN[i]);{выводим результат}
end;

end.

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Столько постов на форуме,
а простейшие требования не выполняете...
Модератор.

Последний раз редактировалось Serge_Bliznykov; 11.12.2010 в 23:00.
Яська вне форума Ответить с цитированием
Старый 11.12.2010, 23:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
FIO:='';
 Probel:=1;
 for I:=1 to Length(FIO) do
Это как понимать? у Вас FIO всегда пустая строка?..
Цитата:
Код:
FN[i]:='';{получили массив содержащий слова из строки FIO.}
  Str:=masFIO[1]+' '+ masFIO[2][1]+'. ' +masFIO[3][1]+'.';
Memo2.Lines.Add(FN[i]);
А это что? ведь в FN занесли пустую строку?! Тогда в Memo2 всегда будет пустая строчка добавляться!



Давайте так.
Вы расскажете, что у Вас есть, и что из этого надо получить,
тогда проще будет Вам подсказать...


И ещё, какое отношение тема имеет к "Работе с файлами в Delphi" ?!
Где здесь работа с файлами?!

Последний раз редактировалось Serge_Bliznykov; 11.12.2010 в 23:06.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.12.2010, 23:26   #3
Яська
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 50
По умолчанию

фамилию заносяться из файла и потом сохраняються в файл.

есть массив фамилия,имя,отчество,т.е. FIO. Каждый FIO - є то тоже массив,ксостоящий из трёх слов,т.е. masFIO . Нужно,чтобы после первой буквы имени и отчества ставилась точка. В Memo2,видимо,должно добавляться str

Последний раз редактировалось Serge_Bliznykov; 11.12.2010 в 23:37.
Яська вне форума Ответить с цитированием
Старый 12.12.2010, 00:23   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

попробуйте такой код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, k : integer;
  FIO  : string; {исходная строка}
  FIOShort : string; {строка ФИО + инициалы}
  masFIO:array[1..3] of string;
begin
  FIO := Trim(Edit1.Text);

  {удалим все двойные/тройные и более ...ные
       пробелы внутри строки}
  while Pos('  ',FIO)>0 do Delete(FIO, Pos('  ',FIO), 1);

  if length(FIO)=0 then
     {пустая строчка - что-то можно сделать,
      обрабатывать эту ситуацию.
      например,
        просто выходим из обработки...   }
     Exit;

  {для удобства
    обработки в цикле, добавим пробел в конец строки}
  FIO := FIO + ' ';
  i := 1;
  while (Pos(' ', FIO)>0) and (i<=3) do
  begin
    k := Pos(' ', FIO);
    masFIO[i] := Copy(FIO, 1, k-1);
    Delete(FIO, 1, K); {удалим слово из строки}
    inc(i);
  end;

  {Проверим, если в строке не было имени или отчества
     тоже выходим, можно при этом ругаться,
     а можно и не ругаться.. :)}
  if (Length(masFIO[2])<1) or (Length(masFIO[3])<1)
    then Exit;

  {сформируем нужную строку }
  FIOShort := masFIO[1]+' ' +
              Copy(masFIO[2],1,1)+'. '+Copy(masFIO[3],1,1)+'.';

  {для отладки кинем полученную строчку в Memo1}
  Memo1.Lines.Append(FIOShort);

end;

то, что надо?...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2010, 11:12   #5
Яська
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 50
По умолчанию

да,спасибо)
но только мне не одну фамилию надо вводить в Edit, а несколько в Мемо
Яська вне форума Ответить с цитированием
Старый 12.12.2010, 11:31   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну так вынесите код обработки в функцию!

примерно так:
Код:
function GetShoftFIO(sFIO : string, var sErr : string) : string;
var
  i, k : integer;
  FIO  : string; {исходная строка}
  masFIO:array[1..3] of string;
begin
  FIO := Trim(sFIO);
  sErr := '';

  {удалим все двойные/тройные и более ...ные
       пробелы внутри строки}
  while Pos('  ',FIO)>0 do Delete(FIO, Pos('  ',FIO), 1);

  if length(FIO)=0 then begin
     {пустая строчка - что-то можно сделать,
      обрабатывать эту ситуацию.
      например,
        просто выходим из обработки...   }
     sErr := '#Ошибка: передана пустая строка';
     GetShoftFIO := '';
     Exit;
   end;

  {для удобства
    обработки в цикле, добавим пробел в конец строки}
  FIO := FIO + ' ';
  i := 1;
  while (Pos(' ', FIO)>0) and (i<=3) do
  begin
    k := Pos(' ', FIO);
    masFIO[i] := Copy(FIO, 1, k-1);
    Delete(FIO, 1, K); {удалим слово из строки}
    inc(i);
  end;

  {Проверим, если в строке не было имени или отчества}
  if (Length(masFIO[2])<1) or (Length(masFIO[3])<1) 
    then begin 
      sErr := '#Ошибка: в исходной строке меньше, чем три слова';
      GetShoftFIO := '';
      Exit;
  end; 

  {сформируем нужную строку }
  GetShoftFIO := masFIO[1]+' ' +
              Copy(masFIO[2],1,1)+'. '+Copy(masFIO[3],1,1)+'.';

end;
использовать можно так:
берём фамилии из Memo1, результат выводим в Memo2
ошибки -> в Memo3

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
   i : integer;
   sErr, sRes : string;
begin
   Memo2.Lines.Clear;
   Memo3.Lines.Clear;
 
   sErr := '';
   for i:=0 to Memo1.Lines.Count-1 do begin
     sRes := (Memo1.Lines[i], sErr);
     if sRes = '' then 
        Memo3.Lines.Append('в строке '+IntToStr(i+1)+
           ' для фамилии '+ Memo1.Lines[i]+ 
           ' возникла ошибка: ' + sErr)
     else
       Memo2.Lines.Append(sRes);
   end;

   ShowMessage('Обработка завершена.');

end;
p.s. писал прямо здесь, в браузере, поэтому могут быть описки, неточности, опечатки, мелкие ошибки...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2010, 11:36   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Яська
А пример Сержа разве по другому делает? (Не пробовал его)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2010, 11:42   #8
Яська
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 50
По умолчанию

он обрабатывает всего одну фамилию,внесённую в Edit

а после procedure TForm1.Button3Click(Sender: TObject); сразу писать функцию, или между ними нужен begin ?

Последний раз редактировалось Stilet; 12.12.2010 в 13:36.
Яська вне форума Ответить с цитированием
Старый 12.12.2010, 12:38   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ой, вот так даже, совсем не знаем структуру программы на Pascal ?

ладно. Если не вдаваясь в подробности, делать ли функцию методомо класса или не делать -
вставляйте текст функции сразу ПЕРЕД
procedure TForm1.Button3Click(Sender: TObject);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2010, 13:18   #10
Яська
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 50
По умолчанию

если честно,то не работала с функциями и процедурами на паскале.
интересоваться программированием стала,когда начали изучать Делфи. так что с функциями и процедурами у меня проблема.

спасибо за помощь)
Яська вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами в Delphi 7 NeAlSe Помощь студентам 11 19.11.2010 17:08
Работа с файлами Delphi 7 Alkifr Помощь студентам 1 14.05.2010 19:25
Delphi. Работа с файлами Nitrox Помощь студентам 2 29.04.2010 10:28
Delphi: Работа с файлами NEFERA Помощь студентам 1 27.02.2010 19:16
Delphi 7. Работа с файлами Flame_of_Death Помощь студентам 8 10.07.2009 12:25