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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.12.2014, 20:47
glozigor glozigor вне форума
Прохожий
 
Регистрация: 16.12.2014
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Помощь с типизированным файлом

В анкетах сотрудников некоторого учреждения имеются следующие сведения: фамилия, имя, отчество,год рождения, должность(мастер, инженер, рабочий), стаж, образование. Вывести фамилии, имена и отчества мастеров с высшим образованием и вычислить их средний стаж.
Ввод файла нужен из блокнота:
Ivanov Igor Bor 1970 master 20 vishee
Petrov Sergey Ser 1966 master 3 vishee
Но чтобы я не вводил, результат одинаковый: Нет мастеров с высшим образованием.
В чем ошибка?
Вот программа:
Код:
program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
type sved=record     {zapis}
       fam:string[10];     {polia zapisi}
       im:string[10];
       ot:string[10];
       god:word;
       dol:string[10];
       staj:real;
       obr:string[10];
     end;
var b:sved;                     {peremen tipa zapis}
    k:integer;           {kol}
    sr:real;              {sred staj }
    f:file of sved;    {tipizip file }
    imf:string[25];          {imia file}
begin                       {glav progr}
  writeln('Vvedite imia file');
  readln(imf);                         {vvod imia file}
  assignfile(f,imf);                       {svias fil peremen s imen file}
  {$I-}
 reset(f);
   {$I+}
 if ioresult=2 then             {result prover suchestv file}
  writeln('File net')
  else
  begin
  k:=0;
  sr:=0;
 
  while not eof (f) do        {poka net konca file}
    begin
     read (f,b);              {chiraem zapis is file}
     with b do
     begin
    if (dol='master') and (obr='vishee') then       {prover uslov}
    begin
        k:=k+1;                       {kol udovl uslov}
        sr:=sr+staj;                  {summ staj udovl uslov}
        Writeln(fam:10,im:10,ot:10);   {vivod udovl uslov}
     end;
     end;
   end;
     if k=0 then
  writeln('Net masterov s vishim obrazov')
     else
     begin
  writeln('Kol-vo masterov s vishim obrazov=',k);
  sr:=sr/k;                                  {sred staj udovl uslov}
  writeln('Sred staj masterov s vishim obrazov=',sr:6:2);
   end;
   end;
   closefile(f);
   readln;
   end.
Админ: Пользуемся тегами для оформления кода!

Последний раз редактировалось Admin, 16.12.2014 в 20:50.
Ответить с цитированием
  #2  
Старый 16.12.2014, 21:17
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно всю строчку проверить на if Pos('vishee', s) > 0
Ответить с цитированием
  #3  
Старый 16.12.2014, 21:33
glozigor glozigor вне форума
Прохожий
 
Регистрация: 16.12.2014
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я не понял
Ответить с цитированием
  #4  
Старый 16.12.2014, 21:42
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Есть просто подозрение что obr = string[10], а при сравнении obr = 'vishee' т.е. string[6]
Ответить с цитированием
  #5  
Старый 16.12.2014, 21:52
glozigor glozigor вне форума
Прохожий
 
Регистрация: 16.12.2014
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я проверил. Не помогает.
Ответить с цитированием
  #6  
Старый 16.12.2014, 21:55
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Покажите пжлст "файл из блокнота" для проверки
Ответить с цитированием
  #7  
Старый 16.12.2014, 22:00
glozigor glozigor вне форума
Прохожий
 
Регистрация: 16.12.2014
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Andrew Atcheson Ia 1980 master 5 vishee
And Atchen Sn 1980 master 5 vishee
rew cheson In 1980 master 5 srednee
Ответить с цитированием
  #8  
Старый 16.12.2014, 23:49
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Да нет, оказалось работает ваш код, всё дело в блокнотном файле, там записи не правильные.

Вот пример нормальной набивки данных, смотрите сами
Вложения
Тип файла: 7z cnsl.7z (2.5 Кбайт, 2 просмотров)
Ответить с цитированием
  #9  
Старый 17.12.2014, 00:09
glozigor glozigor вне форума
Прохожий
 
Регистрация: 16.12.2014
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я извиняюсь, но я не понял как мне вводить нужно данные , чтобы работала моя программа.
Ответить с цитированием
  #10  
Старый 17.12.2014, 00:35
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Выходит вам блокнот нужон

Тогда замените клик кнопки на
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 f:file of sved;
 b:sved;
 i: integer;
 sl: TStrings;
 begin
 sl:= TStringList.Create;
 AssignFile(f, Edit8.Text);
 if FileExists(Edit8.Text) then Reset(f) else Rewrite(f);

for i:= 0 to Memo1.Lines.Count-1 do
 begin
 sl.DelimitedText:=Memo1.Lines[i];

 with b do
begin
 fam := sl[0];     {polia zapisi}
 im  := sl[1];
 ot  := sl[2];
 god := StrToInt(sl[3]);
 dol := sl[4];
 staj:= StrToFloat(sl[5]);
 obr := sl[6];
end;
//seek (f, filesize(f));
Write(f, b);
end;
Closefile(f);
sl.Free;
end;
и выкиньте с формы лишние лейбл-едитные элементы.

Правило такое - одна строка в мемо это одна запись в файле, пример
Цитата:
Andrew Atcheson Ia 1980 master 5 vishee
And Atchen Sn 1980 master 5 vishee
rew cheson In 1980 master 5 srednee
Ivanov Igor Bor 1970 master 20 vishee
Petrov Sergey Ser 1966 master 3 vishee

Последний раз редактировалось Alegun, 17.12.2014 в 00:48.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter