Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Определить, имеет ли файл ASCII-формат

Delphi , Базы данных , ASCII и CSV

Определить, имеет ли файл ASCII-формат

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function isAscii(NomeFile: string): Boolean;
 const
   SETT = 2048;
 var
   i: Integer;
   F: file;
   a: Boolean;
   TotSize, IncSize, ReadSize: Integer;
   c: array[0..Sett] of Byte;
 begin
   if FileExists(NomeFile) then
   begin
     {$I-}
     AssignFile(F, NomeFile);
     Reset(F, 1);
     TotSize := FileSize(F);
     IncSize := 0;
     a       := True;
     while (IncSize < TotSize) and (a = True) do
     begin
       ReadSize := SETT;
       if IncSize + ReadSize > TotSize then ReadSize := TotSize - IncSize;
       IncSize := IncSize + ReadSize;
       BlockRead(F, c, ReadSize);
       // Iterate 
      for i := 0 to ReadSize - 1 do
         if (c[i] < 32) and (not (c[i] in [9, 10, 13, 26])) then a := False;
     end; { while }
     CloseFile(F);
     {$I+}
     if IOResult <> 0 then Result := False
     else
        Result := a;
   end;
 end;


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if OpenDialog1.Execute then
     if isAscii(OpenDialog1.FileName) then
       ShowMessage('ASCII File');
 end;

Программный код на Delphi, который определяет, является ли файл в формате ASCII или нет.

Вот как это работает:

  1. Функция isAscii принимает имя файла в качестве входного параметра и проверяет, существует ли файл.
  2. Если файл существует, функция открывает файл и читает его содержимое байт за байтом.
  3. Затем она проверяет каждый байт, чтобы увидеть, падает ли он в диапазоне ASCII-символов (0-31, исключая 9, 10, 13 и 26).
  4. Если найден некодируемый ASCII-символ, функция устанавливает флаг a в значение False.
  5. После чтения всех байтов функция проверяет значение a. Если оно все еще равно True, это означает, что все символы были ASCII-соответствующими, поэтому файл считается ASCII-файлом.
  6. Функция возвращает результат.

Процедура Button1Click используется для тестирования этой функции. Она открывает диалоговое окно выбора файла и получает имя выбранного файла. Затем она вызывает функцию isAscii с этим именем файла и отображает сообщение, если файл является ASCII-файлом.

Альтернативное решение с более современным и эффективным подходом:

function IsAsciiFile(const FileName: string): Boolean;
var
  F: TFileStream;
begin
  Result := False;
  if FileExists(FileName) then
  begin
    F := TFileStream.Create(FileName, fmOpenRead);
    try
      Result := True;
      while F.Position < F.Size do
      begin
        if not (F.ReadByte in [0..31] - [9, 10, 13, 26]) then
          Result := False;
      end;
    finally
      F.Free;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    if IsAsciiFile(OpenDialog1.FileName) then
      ShowMessage('ASCII File');
end;

В этом коде используется TFileStream для чтения файла, что более эффективно и удобно использовать, чем ручное чтение байтов. Также использован более компактный способ проверки некодируемых ASCII-символов.

В статье описывается функция на языке Delphi, которая определяет, имеет ли файл ASCII-формат, и пример ее использования в приложении с интерфейсом TForm.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ASCII и CSV ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 10:44:38/0.0036430358886719/0