Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перебор строк в файле и замена определенных значений / 9 сообщений из 9, страница 1 из 1
16.06.2019, 18:11
    #39826978
RichardIV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк в файле и замена определенных значений
Привет!
Имеются файлы по 20-25 тысяч строк. Надо программно в каждом файле перебрать все строки (каждая запись - одна строка) и в случае наличия в строке определенного сочетания символов заменить их на другие из справочника соответствии.

Пример одной записи:
tovar=pmd;data=10.10.2018;price=150

Так вот, надо найти код товара, в данном примере - pmd, проверить есть ли на наго код в таблице соответвия и если есть, то заменить на помидор.

Должна получиться строка
tovar=помидор;data=10.10.2018;price=150

Пока планирую каждый файл через AssignFile цеплять и через WriteLn перебирать строки.
Затем буду вычлинять код товара и искать его в таблице соответствий. Правда, не знаю как её оформить - через dbf или ini файл.

Какие будут предложения - как лучше сделать требуемое мне? Чтобы скорость обработки была высокая и память не сильно расходовалась.
...
Рейтинг: 0 / 0
16.06.2019, 18:24
    #39826982
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк в файле и замена определенных значений
RichardIVкак лучше сделать требуемое мне? Чтобы скорость обработки была высокая и память не сильно
расходовалась.

Для высокой скорости используй SetTextBuf. О памяти не беспокойся, она не сожрётся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.06.2019, 21:45
    #39827016
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк в файле и замена определенных значений
Dimitry SibiryakovRichardIVкак лучше сделать требуемое мне? Чтобы скорость обработки была высокая и память не сильно
расходовалась.

Для высокой скорости используй SetTextBuf. О памяти не беспокойся, она не сожрётся.

а я больше к субд склонен в этих вопросах...
...
Рейтинг: 0 / 0
16.06.2019, 22:48
    #39827038
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк в файле и замена определенных значений
Странный формат. Есть возможность его изменить ?

PS:
RichardIVtovar=помидор;data=10.10.2018;price=150
Дорого за гниль ...
...
Рейтинг: 0 / 0
16.06.2019, 23:26
    #39827042
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк в файле и замена определенных значений
RichardIV...
Затем буду вычлинять код товара и искать его в таблице соответствий. Правда, не знаю как её оформить - через dbf или ini файл.

Какие будут предложения - как лучше сделать требуемое мне? Чтобы скорость обработки была высокая и память не сильно расходовалась.
Нафик тебе эти dbf. Прямо в коде замену делай. Понадобится расширить или исправить - по-быстрому исправишь, перкомпилишь - и всё.

Вот, очень быстро и вообще ни одного байта памяти не расходуется:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
var
  fFSrc: TextFile;
  fFTrg: TextFile;
  fOff1: Integer;
  fOff2: Integer;
  fOrig: string;
  fSrcStr: string;
begin
  fOff1 := Length('tovar=') + 1;
  AssignFile(fFSrc, 'src.txt');
  Reset(fFSrc);
  AssignFile(fFTrg, 'trg.txt');
  Rewrite(fFTrg);
  while not Eof(fFSrc) do begin
    Readln(fFSrc, fSrcStr);
    fOff2 := PosEx(';', fSrcStr, fOff1);
    if fOff2 > fOff1 then begin
      fOrig := Copy(fSrcStr, fOff1, fOff2 - fOff1);
      if fOrig = 'pmd' then
        fSrcStr := StuffString(fSrcStr, fOff1, fOff2 - fOff1, 'пындыром')
      else if fOrig = 'ogur' then
        fSrcStr := StuffString(fSrcStr, fOff1, fOff2 - fOff1, 'огурец')
      else if fOrig = 'arb' then
        fSrcStr := StuffString(fSrcStr, fOff1, fOff2 - fOff1, 'арбус')
      else if fOrig = 'kolb' then
        fSrcStr := StuffString(fSrcStr, fOff1, fOff2 - fOff1, 'колбас')
    end;
    Writeln(fFTrg, fSrcStr);
  end;
  CloseFile(fFSrc);
  CloseFile(fFTrg);
...
Рейтинг: 0 / 0
17.06.2019, 10:16
    #39827106
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк в файле и замена определенных значений
ёёёёё,

AssignFile и быстро в 2019м... спорно, НМВ.
...
Рейтинг: 0 / 0
17.06.2019, 10:33
    #39827113
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк в файле и замена определенных значений
alekcvpёёёёё,
AssignFile и быстро в 2019м... спорно, НМВ.
А в чем претензия к AssignFile? Один фиг через те же API работает. Или ты имеешь в виду загружать целиком? Если все строки порядка 30 байт, то 25 тыс строк это всего лишь 30*2*25000 = 1.5 Мб, полная ерунда для нынешних машин. В самом деле не стоит морочиться с поточной обработкой
...
Рейтинг: 0 / 0
17.06.2019, 12:15
    #39827166
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк в файле и замена определенных значений
alekcvpбыстро в 2019м...

Не перевелись ещё наивные вьюноши, полагающие, что новые технологии могут быть быстрее
старых...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.06.2019, 12:23
    #39827169
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк в файле и замена определенных значений
RichardIV как лучше сделать требуемое мне?
Создай объектную модель, и загружай файл в неё.
Потом сохрани эту модель, причём желательно в другой формат, например - Json.

Если в файлах 25к строк, то создание словарей "пмд=помидор" займёт 99% времени.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перебор строк в файле и замена определенных значений / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]