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

Импорт больших файлов с разделителями

Delphi , Файловая система , Файлы

Импорт больших файлов с разделителями

Вот две функции, которые я использую почти во всех моих проектах. Пользоваться ею очень просто, например:


var
  s: string;
  f: TextFile;
  AssignFile(f, 'D:\INPUT.TXT');
  Reset(f);
  while not EOF(f) do

  begin
    ReadLn(s, f);
    ShowMessage(GetField(s, 1)); {Первое поле}
    ShowMessage(GetField(s, 6)); {Шестое поле}
    ShowMessage(GetField(s, 25)); {возвратит '', если нет 25 колонки...}
  end;
  CloseFile(f);

  { ==== Данная функция возвращает поле из строки с разделителем. ==== }

function GetField(InpString: string; fieldpos: Integer): string;
var

  c: Char;
  curpos, i: Integer;
begin

  curpos := 1;
  for i := 1 to fieldpos do
  begin
    result := '';
    if curpos > Length(InpString) then
      Break;
    repeat
      c := InpString[curpos];
      Inc(curpos, 1);
      if (c = '"') or (c = #13) or (c = #10) then
        c := ' ';
      if c <> ',' then
        result := result + c;
    until (c = ',') or (curpos > Length(InpString))
  end;
  if (curpos > Length(InpString)) and (i < fieldpos) then
    result := '';
  result := Trim(result);
end;

{ ==== Данная функция удаляет у строки левые и правые пробелы. ==== }

function Trim(inp_str: string): string;
var

  i: Integer;
begin

  for i := 1 to Length(inp_str) do
    if inp_str[i] <> ' ' then
      Break;
  if i > 1 then
    Delete(inp_str, 1, i - 1);
  for i := Length(inp_str) downto 1 do
    if inp_str[i] <> ' ' then
      Break;
  if i < Length(inp_str) then
    Delete(inp_str, i + 1, Length(inp_str));
  result := inp_str;
  if result = ' ' then
    result := '';
end;

Привет! Вот перевод текста на русский язык:

GetField Функция принимает строковый аргумент InpString и целочисленный аргумент fieldpos. Она возвращает fieldpos-й поле из входной строки, где поля разделены запятой (,). Функция использует цикл для перебора символов в входной строке, пока не найдет fieldpos-й запятую или не достигнет конца строки.

Если fieldpos больше количества полей в входной строке, функция возвращает пустую строку. Это потому, что Delphi использует 1-основное индексирование для массивов и строк, поэтому если в входной строке есть только три поля, четвертое поле будет выходить за пределы диапазона.

Функция также включает в себя некоторые обработчики ошибок для удаления пробелов с начала и конца возвращаемого поля.

Trim Функция принимает строковый аргумент inp_str и возвращает новую строку, из которой удалены ведущие и завершающие пробелы. Функция использует два цикла для перебора символов в входной строке, нахождения первого не-пробельного символа и последнего не-пробельного символа, а затем удаления всех символов до и после этих позиций.

Если полученная строка пустая (т.е. она содержала только пробелы), функция возвращает пустую строку.

В целом, эти функции полезны для парсинга текстовых файлов с разделенными значениями запятой или удаления пробелов из строк. Однако есть некоторые ограничения, которые стоит учитывать:

  • Функция GetField предполагает, что все поля в входной строке разделены запятой (,). Если ваш текстовый файл использует другой разделитель (например, точки с запятой (;) или табуляции (\t)), вам придется модифицировать эту функцию.
  • Функция Trim только удаляет ведущие и завершающие пробелы из входной строки. Если вы хотите удалить все пробельные символы (включая внутренние пробелы) из строки, можно использовать функцию ReplaceStr с регулярным выражением.

Вот некоторые альтернативные решения для рассмотрения:

  • Вместо использования custom-функции GetField, вы можете использовать функцию SplitString из RTL Delphi для разделения входной строки на массив полей.
  • Если вам нужно болееadvanced текстовый парсинг (например, обработка quoted-строк или экранирование специальных символов), вам может потребоваться использование третьей-сторонней библиотеки, такой как Regular Expressions for Delphi.

Надеюсь, это поможет! Пожалуйста, не стесняйтесь задавать вопросы о этих функциях или использовать их в своих проектах.

Обсуждение методов импорта и обработки больших файлов с разделителями для программирования на языке Delphi.


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

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




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


:: Главная :: Файлы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 00:57:46/0.0033271312713623/0