powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с массивом строк
13 сообщений из 13, страница 1 из 1
Работа с массивом строк
    #40087539
Фотография garun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть массив строк (TArray<string>), содержащий некие промежутки времени в виде НАЧАЛЬНОЕ_ВРЕМЯ-КОНЕЧНОЕ_ВРЕМЯ в порядке возрастания.

Нужно сравнить конечное время каждой строки с начальным временем следующей строки и если разница меньше минуты, то объединить две сравниваемые строки в одну взяв начальное время первой строки и конечное время второй строки.

То есть из такого массива:
10:27:19.538-10:27:28.608
10:28:37.211-10:28:42.243
10:30:13.993-10:30:26.087
10:35:51.992-10:35:56.024
10:36:10.151-10:36:13.193
10:36:15.223-10:36:18.235
10:38:47.592-10:38:59.705
10:39:18.859-10:39:21.940
10:45:45.293-10:45:46.309

Должен получиться такой:
10:27:19.538-10:27:28.608
10:28:37.211-10:28:42.243
10:30:13.993-10:30:26.087
10:35:51.992-10:36:18.235
10:38:47.592-10:39:21.940
10:45:45.293-10:45:46.309

Уже час не могу сообразить как это реализовать, помогите в кодом пожалуйста.
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087541
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garun

Уже час не могу сообразить как это реализовать, помогите в кодом пожалуйста.


Просто жжешь напалмом :)
Уже час не могу сообразить как это сделать, поэтому сделайте пожалуйста за меня
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087547
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garunУже час не могу сообразить как это реализовать

Простой цикл от последней строки до второй. В цикле сравниваешь значения и если условие
выполняется - удаляешь текущую строку + модифицируешь предыдущую. Легко.

Гораздо сложнее вопрос какой идиот придумал время хранить в строках.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087553
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garun
Есть массив строк (TArray<string>), содержащий некие промежутки времени

Ты в курсе, что за извращения такса поднимается минимум втрое?

garun
Уже час не могу сообразить как это реализовать

Если следовать принятой архитектуре - то уложить в XML, передать его в СУБД и оттуда вызвать веб-сервис.
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087564
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garun

Уже час не могу сообразить как это реализовать, помогите в кодом пожалуйста.


Почитайте про функции: copy, StrToInt, EncodeTime и тип TDateTime.
У Вас должны получиться 2 функции:
GetStartTime(const s:string):TDateTime и GetEndTime(const s:string):TDateTime
остальное почти очевидно, кроме перехода через границу суток.
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087575
Фотография garun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

garunУже час не могу сообразить как это реализовать

Простой цикл от последней строки до второй. В цикле сравниваешь значения и если условие
выполняется - удаляешь текущую строку + модифицируешь предыдущую. Легко.

Гораздо сложнее вопрос какой идиот придумал время хранить в строках.



Действительно, надо было всего лишь обратный цикл сделать, а я затупил и нагородил костылей. Спасибо за наводку, задача решена.


Код: 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.
 var ATimeList:= TStringList.Create;
 ATimeList.LoadFromFile('C:\timelist.txt');
 ATimeList.Delimiter:= ';';
 ATimeList.DelimitedText:= ATimeList.Text;


 for var i:= Pred(ATimeList.Count) downto 1 do
 begin

  var FTimeStartCurrent:= Date + StrToTime(Copy(ATimeList[i], 1, 12));
  var FTimeEndCurrent:= Date + StrToTime(Copy(ATimeList[i], 14, 12));

  var FTimeStartNext:= Date + StrToTime(Copy(ATimeList[i - 1], 1, 12));
  var FTimeEndNext:=  Date + StrToTime(Copy(ATimeList[i - 1], 14, 12));

  if SecondsBetween(FTimeStartCurrent, FTimeEndNext) < 60
  then
  begin
   ATimeList[i - 1]:= FormatDateTime('hh:nn:ss.zzz', FTimeStartNext) + '-' + FormatDateTime('hh:nn:ss.zzz', FTimeEndCurrent);
   ATimeList.Delete(i);
  end;

 end;

 mmo1.Text:= ATimeList.Text;
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087577
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот это:
garun
Код: pascal
1.
  var FTimeStartCurrent:= Date + StrToTime(Copy(ATimeList[i], 1, 12));

- чтобы что?
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087579
Фотография garun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Вот это:
garun
Код: pascal
1.
  var FTimeStartCurrent:= Date + StrToTime(Copy(ATimeList[i], 1, 12));

- чтобы что?


эм, да, это пожалуй лишнее, убрал
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087580
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
- чтобы что?

Чтобы обеспечить прелестный трудновоспроизводимый баг при запуске в районе полуночи :)
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087592
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garun
Спасибо за наводку, задача решена.
Тот случай, когда хочется плакать над каждой строкой кода
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087726
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то непривычно смотреть код с инлайн переменными в каждой строчке. это сейчас модно, да?
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087728
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Да, хотя форматирование в примере спорное.
...
Рейтинг: 0 / 0
Работа с массивом строк
    #40087744
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Гораздо сложнее вопрос какой идиот придумал время хранить в строках.

Вот сейчас все пользователи XML и JSON очень обиделись))

Нормальная задача. Из поточного лога событий съежить в более компактную форму.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с массивом строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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