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

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

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 15:56   #1
Chelovekpredel
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 33
По умолчанию Обработка файлов(lazarus).

Здравствуйте, я хотел бы попросить помощи в программе, связанной с обработкой файлов.
Заключается она в следующем: дан файл вещественных чисел. Нужно поменять минимальный и максимальный элемент местами в файле.
Снизу представлен код программы, но к сожалению вылезает ошибка:

unit1.pas(54,27) Error: Incompatible type for arg no. 1: Got "File Of Real", expected "AnsiString"

Прошу объяснить в чем может быть проблема. Заранее спасибо.

P.S. писать про то, что делай другим способом не надо. Мне хочется сделать именно этим способом.

Код:
unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  f:file of real;
  i,nmax,nmin:integer;
  a,max,min:real;
  s1,s:string;
begin
  if OpenDialog1.Execute then
  begin
    s:=OpenDialog1.FileName;
    assignfile(f,s);
    reset(f);
    Label1.Visible:=true;
    Edit1.Visible:=true;
    s1:='';
    for i:=0 to filesize(f)-1 do
    begin
      read(f,a);
      if i=0 then
      begin
        max:=a; nmax:=i;
        min:=a; nmin:=i;
      end
      else
      begin
        if max<a then
        begin
          max:=a;
          nmax:=i;
        end;
        if min>a then
        begin
          min:=a;
          nmin:=i;
        end;
      end;
      s1:=s1+FloatToStr(a)+' ';
    end;
    Edit1.Text:=s1;
    Edit1.ReadOnly:=true;
    seek(f,nmax);
    write(f,min);
    seek(f,nmin);
    write(f,max);
    closefile(f);
    reset(f);
    Label2.Visible:=true;
    Edit2.Visible:=true;
    s1:='';
    for i:=0 to filesize(f)-1 do
    begin
      read(f,a);
      s1:=s1+FloatToStr(a)+' ';
    end;
    Edit2.Text:=s1;
    Edit2.ReadOnly:=true;
    Button2.Visible:=true;
    closefile(f);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;

end.
Chelovekpredel вне форума Ответить с цитированием
Старый 22.09.2012, 23:45   #2
dan25
Новичок
Джуниор
 
Регистрация: 13.12.2010
Сообщений: 1
По умолчанию

А почему именно такая строка?
for i:=0 to filesize(f)-1 do

Первый символ в файле 1 а не 0

попробуй так:

for i:=1 to filesize(f) DO
dan25 вне форума Ответить с цитированием
Старый 23.09.2012, 12:14   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от dan25
Первый символ в файле 1 а не 0
глупости. если вы внимательно посмотрите на код, то увидете, что i запоминается в переменных, потом используется для установки позиции в файле через Seek. А первый элемент файла имеет смещение ноль (т.е. чтобы попасть на первый элемент нужно выполнить Seek(f, 0);

Chelovekpredel, не вижу у Вас никакого особенного криминала, вроде бы, Вы всё сделали правильно..
Рискну предположить, что Лазарус для какой-то функции пытается подставить другую функцию с таким же именем, но из другой библиотеки...
Запакуйте исходники проекта в архив и выложите проект на форум целиком (лень пересобирать ручками, чтобы проверить)...
Да, и ещё, Вы понимаете, что файл из вещественных чисел - это НЕ ТЕКСТОВЫЙ файл?! Приложите тот файл, который Вы пытаетесь открыть в программе!

p.s. в Delphi ваш код не только благополучно откомпилировался, но и отработал без runtime ошибок!

Последний раз редактировалось Serge_Bliznykov; 23.09.2012 в 12:18.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Lazarus подключение .so, .dll файлов Diez_ Lazarus, Free Pascal, CodeTyphon 19 07.07.2011 21:23
С++. Обработка файлов teach Помощь студентам 5 02.04.2011 16:41
Открытие html-файлов в Lazarus student2008 Lazarus, Free Pascal, CodeTyphon 2 25.12.2010 11:07
Обработка файлов Си++ modulrev Помощь студентам 22 19.02.2009 18:53