Задача на текстовые файлы(Delphi)

MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Два варианта:
1. Просто использовать метод Memo.Lines.LoadFromFile.
2.Читать файл посимвольно и писать прочитанные символы в строку, пока не попадется последовательность #10#13, потом добавлять полученную строку в Memo.
Ни что так не ограничивает фантазию программиста, как компилятор...
DOM
Сообщения: 35
Зарегистрирован: 18 апр 2008, 01:59

вот у меня никак и не получается первый вариант((. Пишу Memo1.Lines.LoadFromFile(fName).Не работает пишет ошибка доступа-проблема в строчке:
readln(f,buf); с ней не знаю как что сделать, чтоб читался файл((
Если тебя не затруднит, напиши пожалуйста как должно выглядедь
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Как-то не понимаю, в чем проблема.
Загрузка в Memo никак не связана с файловой переменной.
Допустим, есть файл C:\Temp\Data.txt.
Тогда без всяких File of Char и т.п. грузится так:
[syntax='Delphi']
Memo1.Lines.LoadFromFile('C:\Temp\Data.txt');
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
DOM
Сообщения: 35
Зарегистрирован: 18 апр 2008, 01:59

Спасибо!! Дошло наконец то.Т.е OpenDialog фактически не нужен? А как тогда файл открыть из программы, который тебе нужно, не просписывая в коде путь к нему?
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

DOM писал(а):Спасибо!! Дошло наконец то.Т.е OpenDialog фактически не нужен? А как тогда файл открыть из программы, который тебе нужно, не просписывая в коде путь к нему?


Тогда как раз через OpenDialog:
[syntax='Delphi']
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
DOM
Сообщения: 35
Зарегистрирован: 18 апр 2008, 01:59

В принципе с задачкой разобрался, сделал как препод говорит(бред правда).Вот что получается: пользователь вводит в Memo текст, затем он сохраняется в символьный файл, открывается из файла и читаются 2 первых символа в нем(в файле). Для создания, открытия и выполнения проги пришлось писать 3 обработчика(опять капризы препода) :( .Но осталась одна проблема-считывание двух первых символов для проверки четности полученного из них числа.
Вот код:

Код: Выделить всё

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Memo1: TMemo;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);

    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  F:file of char;
  m,n:char;
  s,z: string;
  i,j:integer;

procedure TForm1.N2Click(Sender: TObject);    //Процедура создания файла
begin
   AssignFile(F,'TOPIK.dat');
   ReWrite(F);
      For i:=0 to Memo1.Lines.Count-1 do
      begin
         s:=Memo1.Lines[i];
         For j:=0 to length(s) do
                Write(F,s[j]);
      end;
   CloseFile(F);
end;

procedure TForm1.N3Click(Sender: TObject);  //Процедура открытия файла
begin
   Reset(F);
   Read(F,m);


end;


procedure TForm1.N4Click(Sender: TObject);   //Процедура обработки файла
begin
   If (m in ['0'..'9']) and (n in ['0'..'9'])
      then
         begin
            i:=StrToInt(m+n);
            If (i mod 2 )=0
               then
                  ShowMessage('Число четное')
               else
                  ShowMessage('Число нечетное');
         end
       else ShowMessage('Два первых символа не числа');

   CloseFile(F);                                    
end;

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

end.
Конкретно загвоздка в считывании("выделении") из файла(!!!) 2 первых символов, никак не получается, помогите дописать прогу :rolleyes:

Проблема с этой частью(обработчик считывания из файла):

Код: Выделить всё

procedure TForm1.N3Click(Sender: TObject);  //Процедура открытия файла и чтения
begin
   Reset(F);
   Read(F,m);


end;

MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Не понимаю, в чем проблема.
[syntax='Delphi']
Reset(F);
Read(F,C1);//первый символ
Read(F,C2);//второй символ
CloseFile(F);
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
DOM
Сообщения: 35
Зарегистрирован: 18 апр 2008, 01:59

Проблема в том, что когда я также писал, то последняя процедура работала неправильно(всегда выдавалось сообщение "Два первых символа не цифры", хотя они были таковыми) :confused:
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

А каким образом проверяется, цифры это или нет?
Ни что так не ограничивает фантазию программиста, как компилятор...
DOM
Сообщения: 35
Зарегистрирован: 18 апр 2008, 01:59

Часть процедуры для проверки:

Код: Выделить всё

If (C2 in ['0'..'9']) and (C2 in ['0'..'9'])
      then
         begin
            i:=StrToInt(C1+C2);
            If (i mod 2 )=0
               then
                  ShowMessage('Число четное')
               else
                  ShowMessage('Число нечетное');
         end
       else ShowMessage('Два первых символа не числа');
Может каким другим способом проверять?

P.S Полный код проги выше написал(только 1-й и 2-й символы у меня назывались m и n, а не C1 и C2, но это не столь важно)
Ответить