Помощь - Поиск - Пользователи - Календарь
Полная версия: Обработка текстового файла
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Grey-99
Помогите пожалуйста с этой программой mega_chok.gif

Задача:Создать текстовый файл, в котором содержаться сведения о рабочих( Фамилия, Инициалы, Зарплата)
К примеру:
Петров ИИ 1200
Сидоров ПР 2000
Попов КП 3000


Надо считать эти записи, и отсортировать по зарплате. Использовать процедуры.
Вот такие пероги. Если кто может помочь, помогите пожалуйста.
Ozzя
Цитата
Помогите пожалуйста разобраться в программе

В какой программе?
Текста Вашей программы не наблюдаю.
Grey-99
Просто я не знаю как написать процедуру обработки текстового файла, по-этому и обратился за помощью к знающим людям

Вот процедура доступа outputfile:

Цитата
type base = RECORD
name, ini:string;
money: integer;
END;

mass = array [1..n] of string;


var people : array [1..100] of base;
nm : base;
f: text; m:mass i,j:integer;

procedure outputfile(var q:integer);
var i:integer;
begin
assign (f,'D:\Delphi7\Rabotnik.txt');
reset(f);
i:=1;
repeat
readln(f,m[i]);
inc(i);
until eof(f);
close (f);
q:=i;
end;


begin

outputfile(p);
readln;
end.
klem4
Файл обязательно текстовый и каждая строка в нем имеит вид:

Фиаимия <пробел> Иницалы <пробел> Зарплата

?
Grey-99
Цитата(klem4 @ 27.12.2006 16:39) *

Файл обязательно текстовый и каждая строка в нем имеит вид:

Фиаимия <пробел> Иницалы <пробел> Зарплата

?


да
klem4
uses crt;

const
  max_records = 100;

type

  TStrings = array[1..max_Records] of String;

  TFile = Text;

function ReadData(const fName: String; var S: TStrings): Integer;
var
  i: Integer;
  f: TFile;
begin

  assign(f, fName); reset(f);

  i := 0;

  while not(eof(f)) do begin
    inc(i);
    readln(f, S[i]);
  end;

  close(f);

  ReadData := i;
end;

function GetMoney(const S: String): Integer;
var
  value, e: Integer;
begin

  Val(
  Copy( Copy(s, Pos(' ', s) + 1, 255), POS(' ',Copy(s, Pos(' ', s) + 1, 255)),255),
  value,
  e);

  GetMoney := value;

end;

procedure Sort(var S: TStrings; const size: Integer);
var
  i, j: Integer;
  temp: String;
begin
  for i := size downto 2 do
   for j := 1 to i - 1 do
    if GetMOney(S[j]) <= GetMoney(S[j + 1]) then begin
      temp := S[j]; S[j] := S[j + 1]; S[j + 1] := temp;
    end;
end;

procedure WriteToFile(const fName: String; const S: TStrings; const size: Integer);
var
  f: TFile;
  i: Integer;
begin
  assign(f, fName); rewrite(f);
  for i := 1 to size do writeln(f, S[i]);
  Close(f);
end;

var
  S: TStrings;
  size: Integer;
begin
  size := ReadData('C:\forum.txt', S);
  Sort(S, size);
  WriteToFile('C:\forum.txt', S, size);
end.
 
Grey-99
Спасибо тебе огромное good.gif
Grey-99
Вот этаже прога(но эна просто считывает записи из текстового файла и выводит на экран), но она не хочет выводить на экран записи, в чем ошибка? nea.gif


program S4itivaemIzFaila;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const n=1000;
type  base = RECORD
             name, ini:string; money: integer;
             END;
      mass = array [1..n] of string;

var   people : array [1..100] of base;
      nm : base;
      f: text;
      m,pr:mass;
       s,maxclovo:string;
       i,j,k,p:integer;

procedure outputfile(var q:integer);
var     i:integer;
begin
assign (f,'D:\Delphi7\Student.txt');
   reset(f);
   i:=1;
   repeat
      readln(f,m[i]);
      inc(i);
   until eof(f);
   close (f);
   q:=i;
end;

       Procedure Obrabotka( Var q:integer);
           Var  a:string;
                i,k,j,r:integer;
       Begin
               For j:=1 to q do begin
               i:=1;
               Writeln(j,' ');
               a:=pr[j]+' ';
              Repeat
                k:=Pos(' ',a);
 if i=1 then begin people[j].name:=copy(a,1,k-1); write(' ':1,people[j].name:6); end;
 if i=2 then begin people[j].ini:=copy(a,1,k-1);  write(' ':1,people[j].ini:6); end;
 if i=3 then begin val(copy(a,1,k-1),r,r); people[j].money:=r; write(people[j].money:6); end;
 inc(i);
 delete(a,1,k);
 until k = 0;
writeln;  end;
       End;

BEGIN
    Writeln('Obshiu* spisok rabotnikov:');
    Writeln;

    outputfile(p);
    Obrabotka(p);
    Readln;

  { TODO -oUser -cConsole Main : Insert code here }
END.
Bokul
f: text;

Почему файл делаешь текстовым? Читаешь ты его ведь в переменную типа base, а значит и файл должен быть типизированным.. smile.gif
f: file of base


Цитата
но эна просто считывает записи из текстового файла и выводит на экран

А так не пойдёт, с текстовые и работать надо по-другому - читать не в переменную типа base, а в строку, потом ее анализировать (разделять на компоненты) и только после этого присваивать их соответственным полям base .
Grey-99

[/quote]
А так не пойдёт, с текстовые и работать надо по-другому - читать не в переменную типа base, а в строку, потом ее анализировать (разделять на компоненты) и только после этого присваивать их соответственным полям base .
[/quote]

Подскажи пожалуйста, что именно мне нужно исправить unsure.gif
Bokul
Grey-99, тебе же klem4 уже написал рабочий вариант программы с текстовыми файлами. blink.gif Что еще надо?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.