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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2015, 22:09   #1
artem55555p
Пользователь
 
Регистрация: 21.08.2013
Сообщений: 21
По умолчанию Помогите найти ошибку в паскале

Здравствуйте. Дан символьный файл f. Записать в файл g символы имеющиеся в файле f в обратном порядке, я не могу понять, как сделать в обратном порядке? Сделал обычную запись, а в обратном порядке не получается...
Вот программа:

Код:
unit Unit1;

interface

uses
  System, System.Drawing, System.Windows.Forms;

type
  Form1 = class(Form)
    procedure button1_Click(sender: Object; e: EventArgs);
    procedure button2_Click(sender: Object; e: EventArgs);
    procedure button3_Click(sender: Object; e: EventArgs);
  {$region FormDesigner}
  private
    {$resource Unit1.Form1.resources}
    button2: Button;
    button3: Button;
    button1: Button;
    {$include Unit1.Form1.inc}
  {$endregion FormDesigner}
  public 
    constructor;
    begin
      InitializeComponent;
    end;
  end;

implementation

var
  gpath: string;
  gpath2: string;
  
procedure Form1.button1_Click(sender: Object; e: EventArgs);// Файл f
var
  open: System.Windows.Forms.OpenFileDialog;
  error: boolean;
begin
  gpath := '';
  try
    open := new OpenFileDialog();
    if open.ShowDialog() = System.Windows.Forms.DialogResult.OK then 
      gpath := open.FileName;
  except
    MessageBox.Show('Не удалось открыть файл');
    error := true;
  end;
  if error then exit;
end;

procedure Form1.button2_Click(sender: Object; e: EventArgs);// Файл g
var
  f, g: file of char;
  i, j: integer;
  x: char; 
  str: string;
  error: boolean;
begin
  str := 'qwertyuioplkjhgfdsazxcvbnm';
  j := 0;
  if (gpath = '') or (gpath2 = '') then messagebox.Show('Не был выбран один из файлов', 'Ошибка') else
  begin
    error := false;
    try
      Assign(f, gpath); 
      Reset(f);
    except
      MessageBox.Show('Error');
      error := true;
    end;
    if error then exit;
    
    try
      Assign(g, gpath2);
      rewrite(g);
    except
      MessageBox.Show('Error');
      error := true;
      CloseFile(f);    
    end;
    try
      for i:=FileSize(f)-1 downto 0 do 
      begin
        read(f, x);
        if str.Contains(x) then
        begin
          write(g, x);
        end;
      end;
    finally
      CloseFile(f);
      CloseFile(g);
    end;
  end;
end;

procedure Form1.button3_Click(sender: Object; e: EventArgs);//Запись
var
  open: System.Windows.Forms.OpenFileDialog;
begin
  gpath2 := '';
  try
    open := new OpenFileDialog();
    if open.ShowDialog() = System.Windows.Forms.DialogResult.OK then 
      gpath2 := open.FileName;
  except
    on System.IO.IOException do MessageBox.Show('Error');
  end;
end;

end.

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

попробуйте:
Код:
var
  f, g: file of char;
  i, j: integer;
  x: char; 
.......
  Reset(f);
  Rewrite(g);
  for i:=FileSize(f)-1 downto 0 do begin
    Seek(f, i);
    Read(f,x);
    Write(g,x);
  end;
  CloseFile(f);
  CloseFile(g);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.11.2015, 02:15   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

2 Serge_Bliznykov:
ну зачем такое вредительство? побайтное чтение файла – это ж 100% говнокод, согласен?

буфер, буфер и ещё раз буфер!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.11.2015, 10:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
буфер, буфер и ещё раз буфер!
Та да...
Код:
var f:TFileStream; s:TStringStream; ss:String;
begin
 s:=TStringStream.Create('');
 f:=TFileStream.Create('Файлик',fmOpenReadWrite);
 s.CopyFrom(f,f.Size);
 ss:=s.DataString;
 s.Clear;
 s.WriteString(Reverse(s));
 f.Position:=0;
 f.CopyFrom(s,s.Size);
 f.free; s.free;
end.
Где reverse() функция переворачивания строки.

Хотя может ТС имеет ввиду: "У меня каждую строку текстового файла. И нужно. Обратно писать. Помагити!!!! А-а-а!!!"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2015, 15:28   #5
artem55555p
Пользователь
 
Регистрация: 21.08.2013
Сообщений: 21
По умолчанию

не работает так(
artem55555p вне форума Ответить с цитированием
Старый 07.11.2015, 16:03   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
open := new OpenFileDialog();
Это PascalABC.NET? Дык может там и TFileStream с TStringStream нет?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.11.2015, 18:10   #7
artem55555p
Пользователь
 
Регистрация: 21.08.2013
Сообщений: 21
По умолчанию

да, вы правы, нету....
artem55555p вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10
надо найти ошибку в паскале Len4i]{ Помощь студентам 3 03.06.2010 12:06
Строки в Паскале, найти ошибку bingooo Помощь студентам 0 07.04.2010 19:24
2 задания на паскале(сумма ряда, помогите найти ошибку) Niko Uoki Помощь студентам 3 07.06.2009 17:39
Помогите найти ошибку в паскале. Рената Паскаль, Turbo Pascal, PascalABC.NET 14 26.05.2007 12:12