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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2022, 00:30   #21
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Код только с массивами без динамических списков
Заменил динамические списки на массивы, для такого вида текста:
Код:
class: 1234
buf: 2323
prod:
 name: msi 990
 col: red
 quantity: 1
prod:
 name: micro 500
 col: blue
 quantity: 1
prod:
 name: msi 990
 col: red
 quantity: 2
prod:
 name: allso
 col: blue
 quantity: 1
prod:
 name: micro 500
 col: blue
 quantity: 1
book: open
TF: open
Спасибо
cybernewbie вне форума Ответить с цитированием
Старый 12.10.2022, 00:43   #22
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от cybernewbie Посмотреть сообщение
Почему именно 4?
Это комментарий для структуры вида
Код:
prod:
 name: test name
 col: blue
 quantity: 1
в ней 4 строки. Значит зная общее количество строк в тексте (Lines.Count) можно вычислить возможное количество структур, которое может поместиться в этом тексте. Это количество вычисляется по формуле: <количество строк в тексте> / <количество строк в одной структуре> = <максимальное число структур в тексте>. Если при увеличении длины структуры я не изменил в комментарии цифру 4 на 10, то это просто очепятка не влияющая на работу программы.

Цитата:
Сообщение от cybernewbie Посмотреть сообщение
Попробовал такие условия, структуры объединяются, но почему то суммируются не так:
Это связано с тем, что я при обработке поля quantity рассчитывал на то, что между названием и числом будет не только двоеточие, но еще и пробел. Дело не в условии. Исправьте 11 на 10:
Код:
copy(Lines[ind[j] + 3], 11)
macomics вне форума Ответить с цитированием
Старый 12.10.2022, 00:48   #23
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от cybernewbie Посмотреть сообщение
Влияет ли значение этой переменной на количество начальных пропущенных строк?
Заранее спасибо
Цикл идет с последней строки к первой. Если количество строк пропущенных с конца текста меньше длины структуры, тогда при попытке считать структуру мы получим ошибку array index out of bounds (индекс массива вышел за границы диапазона). Тоже самое необходимо соблюдать при обработке двух соседних структур. Если число строк меньше длины структуры, тогда в следующей структуре одно из полей будет иметь значение prod: и т.д. Это тоже ошибка. Чтобы избежать обоих ошибок надо посчитать количество строк не являющихся началом структуры ('prod:').

ADD: В алгоритме приложенном в файле я также сделал проверку на присутствие в структуре всех ее полей.

Последний раз редактировалось macomics; 12.10.2022 в 00:53.
macomics вне форума Ответить с цитированием
Старый 13.10.2022, 02:16   #24
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Это комментарий для структуры вида
Да, я потом это понял, прочитал листинги ещё раз.
Цитата:
Сообщение от macomics Посмотреть сообщение
в ней 4 строки. Значит зная общее количество строк в тексте (Lines.Count) можно вычислить возможное количество структур, которое может поместиться в этом тексте. Это количество вычисляется по формуле: <количество строк в тексте> / <количество строк в одной структуре> = <максимальное число структур в тексте>. Если при увеличении длины структуры я не изменил в комментарии цифру 4 на 10, то это просто очепятка не влияющая на работу программы.
Понял Вас
Цитата:
Сообщение от macomics Посмотреть сообщение
Это связано с тем, что я при обработке поля quantity рассчитывал на то, что между названием и числом будет не только двоеточие, но еще и пробел. Дело не в условии. Исправьте 11 на 10:
Да получилось, спасибо.
Цитата:
Сообщение от macomics Посмотреть сообщение
Цикл идет с последней строки к первой. Если количество строк пропущенных с конца текста меньше длины структуры, тогда при попытке считать структуру мы получим ошибку array index out of bounds (индекс массива вышел за границы диапазона). Тоже самое необходимо соблюдать при обработке двух соседних структур. Если число строк меньше длины структуры, тогда в следующей структуре одно из полей будет иметь значение prod: и т.д. Это тоже ошибка. Чтобы избежать обоих ошибок надо посчитать количество строк не являющихся началом структуры ('prod:').
Понял. Блин я не обратил внимание на обратный цикл, сейчас вспомнил что Вы ранее упоминали.
Цитата:
Сообщение от macomics Посмотреть сообщение
ADD: В алгоритме приложенном в файле я также сделал проверку на присутствие в структуре всех ее полей.
Да, обратил на это внимание.

Большое спасибо за помощь.
cybernewbie вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск совпадений и их суммирование Антониовсс Microsoft Office Excel 3 13.02.2017 19:47
Хранение и поиск значения по строковому наименованию igh0st Общие вопросы Delphi 7 23.09.2013 11:19
Поиск и суммирование информации manula Microsoft Office Excel 6 07.05.2013 14:24
Поиск цены товара по дате и наименованию dronicos Microsoft Office Excel 4 02.11.2012 19:31
Поиск дублей и суммирование Dicata Microsoft Office Excel 3 16.01.2012 12:29