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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2016, 17:06   #31
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

sarsen, Вы на Delphi программу пишете?


попробуйте такой код:
Код:
function BinaryToByte(const s : string):byte;
var i:integer;

begin
   result := 0;
   for i:=1 to 8 do begin
     result := result * 2;
     if s[i]='1' then Inc(result);

   end;
end;

var s : string;

  b  : byte;
  ch : char;
  f  : TFileStream;
  f2 : File of byte;

begin

 try
  f:=TFileStream.Create('test.log',fmOpenRead);

  AssignFile(f2, 'result.log');
  Rewrite(f2);

  s:='';
  for i:=1 to f.Size do begin
    f.ReadBuffer(ch,1);
    if (ch='0') or (ch='1') then begin
      s := s + ch;
      if length(s)=8 then begin
         b := BinaryToByte(s);
         BlockWrite(f2, b, 1);
         s := '';
      end;
    end
  end;
 CloseFile(f2);
 ShowMessage('Готово');
end;

end.

Последний раз редактировалось Serge_Bliznykov; 17.10.2016 в 17:13.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.10.2016, 04:16   #32
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

спасибо попробую!
sarsen вне форума Ответить с цитированием
Старый 18.10.2016, 15:18   #33
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

Спасибо работает. Только забыли добавить i:integer;
sarsen вне форума Ответить с цитированием
Старый 18.10.2016, 15:28   #34
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Всегда пожалуйста.

забыл, конечно.
я же данный пример в блокноте написал, не проверял, так что, не обессудьте!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.12.2016, 07:27   #35
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

Уважаемый Serge_Bliznykov обращусь ещё раз за помощью. Прикрутил я оболочку в делпфи
Код:

unit Unit1;


interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,QDialogs,IniFiles;


type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function BinaryToByte(const s : string):byte;
var i:integer;

begin
   result := 0;
   for i:=1 to 8 do begin
     result := result * 2;
     if s[i]='1' then Inc(result);

   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var s : string;
   i:integer;
  b  : byte;
  ch : char;
  f  : TFileStream;
  f2 : File of byte;

begin

 try
  f:=TFileStream.Create('test.log',fmOpenRead);

  AssignFile(f2, 'test.txt');
  Rewrite(f2);

  s:='';
  for i:=1 to f.Size do begin
    f.ReadBuffer(ch,1);
    if (ch='0') or (ch='1') then begin
      s := s + ch;
      if length(s)=8 then begin
         b := BinaryToByte(s);
         BlockWrite(f2, b, 1);
         s := '';
      end;
    end;
  end;
 CloseFile(f2);
 ShowMessage('Готово');
 except
MessageBox(handle,pchar('Файл не найден'),pchar('Ошибка'),16);
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
  f1,f2 : file of byte;
  j, keyIndex : integer;
  s, key : AnsiString;
  AppIniFile: TIniFile;
  f1Name, f2Name : string;

begin
   try
  try
    AppIniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
    f1Name := AppIniFile.ReadString('Main','Source_filename', '');
    if trim(f1Name)='' then begin 
        f1Name := ExtractFilePath(ParamStr(0))+'test.txt';
        AppIniFile.WriteString('Main','Source_filename', f1Name);
    end;
    f2Name := AppIniFile.ReadString('Main','Result_filename', '');
    if trim(f2Name)='' then begin
       f2Name := ExtractFilePath(ParamStr(0))+'result.txt';
       AppIniFile.WriteString('Main','Result_filename', f2Name);
    end;
    key := AppIniFile.ReadString('Main','Key', '');
    if trim(key)='' then begin
      key := 'zzzzzzzzzz';
      AppIniFile.WriteString('Main','Key', key);
    end;
  finally
    FreeAndNil(AppIniFile);
  end;

  if Not FileExists(f1Name) then begin WriteLn('#Error: file ',f1Name,' not found!'); Exit end;
  AssignFile(f1, f1Name);
  Reset(f1);
  if FileSize(f1)=0 then begin CloseFile(f1); Exit; end;

  AssignFile(f2, f2Name);
  Rewrite(f2);

  SetLength(s, FileSize(f1));
  BlockRead(f1, s[1], FileSize(f1));

  keyIndex := 1;
  j:=1;
  while j<Length(s) do begin
     if (s[j]=#$0D) and (s[j+1]=#$0A) then Inc(j,2)
     else begin
        s[j] := chr( ord(s[j]) xor ord(key[keyIndex]));
       Inc(keyIndex);
       if keyIndex>Length(key) then keyIndex:=1;
       inc(j);
     end;
  end;
  BlockWrite(f2, s[1], Length(s));
  CloseFile(f1);
  CloseFile(f2);
   ShowMessage('Готово');
 except
MessageBox(handle,pchar('Файл не найден'),pchar('Ошибка'),16);
end;
  end;
end.
Теперь хотел бы, сделать чтобы пасс брался из поля ввода, а файл выбирался кнопкой и по завершению вылазило окошко куда сохранить, это возможно сделать? Всяко пробывал, ну не получается у меня, бездарь я
sarsen вне форума Ответить с цитированием
Старый 01.12.2016, 10:08   #36
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от sarsen Посмотреть сообщение
сделать чтобы пасс брался из поля ввода
"пасс" - это key, как я догадываюсь?
ну, у Вас сейчас key по клику на Button2 читается из INI файла.
сделайте, чтобы оно бралось из Edit и всех делов то!
Код:
key := edKey.Text;

Цитата:
Сообщение от sarsen Посмотреть сообщение
а файл выбирался кнопкой и по завершению вылазило окошко куда сохранить
посмотрите на компоненты TOpenDialog и TSaveDialog
(их надо кинуть на форму, настроить и прописать вызов в коде.
например:
Код:
  if OpenDialog1.Execute then begin
    f1Name := OpenDialog1.FileName);
  end
  else 
    Exit;

  if SaveDialog1.Execute then begin
    f2Name := SaveDialog1.FileName);
  end
  else 
    Exit;
и всё!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.12.2016, 10:27   #37
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
"пасс" - это key, как я догадываюсь?
ну, у Вас сейчас key по клику на Button2 читается из INI файла.
сделайте, чтобы оно бралось из Edit и всех делов то!
Код:
key := edKey.Text;


посмотрите на компоненты TOpenDialog и TSaveDialog
(их надо кинуть на форму, настроить и прописать вызов в коде.
например:
Код:
  if OpenDialog1.Execute then begin
    f1Name := OpenDialog1.FileName);
  end
  else 
    Exit;

  if SaveDialog1.Execute then begin
    f2Name := SaveDialog1.FileName);
  end
  else 
    Exit;
и всё!
хорошо, спасибо позже попробую!
sarsen вне форума Ответить с цитированием
Старый 01.12.2016, 16:07   #38
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

чем я уже тока это не заменял

Код:
    key := AppIniFile.ReadString('Main','Key', '');
    if trim(key)='' then begin
      key := 'zzzzzzzzzz';
      AppIniFile.WriteString('Main','Key', key);
    end;
ни черта не получается, буду значит юзать как есть

Последний раз редактировалось sarsen; 01.12.2016 в 16:12.
sarsen вне форума Ответить с цитированием
Старый 01.12.2016, 16:42   #39
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от sarsen Посмотреть сообщение
чем я уже тока это не заменял
покажите, как?


Цитата:
Сообщение от sarsen Посмотреть сообщение
буду значит юзать как есть
ну, это ваше право!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.12.2016, 17:53   #40
sarsen
Пользователь
 
Регистрация: 04.08.2016
Сообщений: 58
По умолчанию

Код:

unit Unit1;


interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,QDialogs,IniFiles;


type
  TForm1 = class(TForm)
    Button2: TButton;
    Edit1: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);

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

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.PasswordChar := '*';
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  f1,f2 : file of byte;
  j, keyIndex : integer;
  s, key : AnsiString;
  AppIniFile: TIniFile;
  edKey: TEdit;
  f1Name, f2Name : string;

begin
   try
  try
    AppIniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
    f1Name := AppIniFile.ReadString('Main','Source_filename', '');
    if trim(f1Name)='' then begin 
        f1Name := ExtractFilePath(ParamStr(0))+'test.txt';
        AppIniFile.WriteString('Main','Source_filename', f1Name);
    end;
    f2Name := AppIniFile.ReadString('Main','Result_filename', '');
    if trim(f2Name)='' then begin
       f2Name := ExtractFilePath(ParamStr(0))+'result.txt';
       AppIniFile.WriteString('Main','Result_filename', f2Name);
    end;

    key := Edit1.Text;

  finally
    FreeAndNil(AppIniFile);
  end;

  if Not FileExists(f1Name) then begin WriteLn('#Error: file ',f1Name,' not found!'); Exit end;
  AssignFile(f1, f1Name);
  Reset(f1);
  if FileSize(f1)=0 then begin CloseFile(f1); Exit; end;

  AssignFile(f2, f2Name);
  Rewrite(f2);

  SetLength(s, FileSize(f1));
  BlockRead(f1, s[1], FileSize(f1));

  keyIndex := 1;
  j:=1;
  while j<Length(s) do begin
     if (s[j]=#$0D) and (s[j+1]=#$0A) then Inc(j,2)
     else begin
        s[j] := chr( ord(s[j]) xor ord(key[keyIndex]));
       Inc(keyIndex);
       if keyIndex>Length(key) then keyIndex:=1;
       inc(j);
     end;
  end;
  BlockWrite(f2, s[1], Length(s));
  CloseFile(f1);
  CloseFile(f2);
   ShowMessage('Ãîòîâî');
 except
MessageBox(handle,pchar('Ôàéë íå íàéäåí'),pchar('Îøèáêà'),16);
end;
  end;


end.
sarsen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно написать конвертер Nemesis4ever Помощь студентам 0 16.01.2011 15:22
Помогите написать конвертер cpp->html Vano-sie72 Помощь студентам 1 18.05.2009 22:15
Помогите написать конвертер cpp->html Vano-sie72 Фриланс 1 18.05.2009 15:57
задача под windows,помогите написать.Надо написать на Borland C++Builder 6. eddddii Помощь студентам 9 23.05.2008 17:04