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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2017, 04:57   #11
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
type TStringArray=array of string;

function Split(Str:string;Delimiter:char):TStringArray;
var
  LazyParser:TStringList;
  i:integer;
begin
  LazyParser:=TStringList.Create;
  try
    LazyParser.Delimiter:=Delimiter;
    LazyParser.DelimitedText:=Str;
    SetLength(result,LazyParser.Count);
    for i:=0 to LazyParser.Count-1 do
      result[i]:=LazyParser[i];
  finally
    LazyParser.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  DiffData,Data:TStringList;
  StrSt,StrEnd,StrData:TStringArray;
  i,j:integer;
  StartDt,EndDt,AvgDt,Dt:TDateTime;
  Diff,Value:double;
  Str:string;
begin
  DecimalSeparator:='.';
  DiffData:=TStringList.Create;
  try
    DiffData.LoadFromFile('.\files\2ndfile.txt');
    Data:=TStringList.Create;
    try
      Data.LoadFromFile('.\files\1stfile.txt');
      for i:=0 to DiffData.Count-1 do
      begin
        StrSt:=Split(DiffData[i],',');
        if Length(StrSt)<>6 then Continue;
        StartDt:=EncodeDateTime(StrToInt(StrSt[4]), StrToInt(StrSt[3]),
            StrToInt(StrSt[2]), StrToInt(StrSt[0]), StrToInt(StrSt[1]),0,0);
        Diff:=StrToFloat(StrSt[5]);

        if i<DiffData.Count-1 then
        begin
          StrEnd:=Split(DiffData[i+1],',');
          if Length(StrEnd)<>6 then Continue;
          EndDt:=EncodeDateTime( StrToInt(StrEnd[4]), StrToInt(StrEnd[3]),
            StrToInt(StrEnd[2]), StrToInt(StrEnd[0]), StrToInt(StrEnd[1]),0,0);
        end else
        begin
          EndDt:=StartDt+AvgDt;
        end;
        AvgDt:=EndDt-StartDt;

        Caption:=IntToStr(i+1)+'/'+IntToStr(DiffData.Count);
        Application.ProcessMessages;
        for j:=0 to Data.Count-1 do
        begin
          StrData:=Split(Data[j],' ');
          if Length(StrData)<>5 then Continue;

          Dt:=EncodeDateTime(
            StrToInt('20'+copy(StrData[3],5,2)),
            StrToInt(copy(StrData[3],3,2)),
            StrToInt(copy(StrData[3],1,2)),
            StrToInt(copy(StrData[2],1,2)),
            StrToInt(copy(StrData[2],3,2)),
            StrToInt(copy(StrData[2],5,2)),0);

          if (Dt>=StartDt) and (Dt<=EndDt) then
          begin
            Value:=StrToFloat(StrData[4]);
            Value:=Value-Diff;
            Str:=Data[i];

            Str:=copy(Str,0,length(Str)-length(StrData[4]))+FormatFloat('00000.0',Value);
            Data[i]:=Str;
          end;
        end;
      end;

      Data.SaveToFile('.\files\Slym_resultfile.txt');
    finally
      Data.Free;
    end;
  finally
    DiffData.Free;
  end;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание анимированного по времени KML файла на Java Айсулу Курмашева Помощь студентам 0 01.02.2015 17:19
Чтение даты и времени из файла triest Помощь студентам 5 18.05.2011 23:33
Посоветуйте наиболее актуальные для нашего времени книги и программы для программирования и отладки. Lemax25 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 09.03.2010 17:12
Фиксирование времени открытия файла eda Microsoft Office Excel 5 05.02.2009 11:52
Третий проект поправок, призванных учредить органы студенческого самоуправления в вузах и сузах страны. Alar Свободное общение 3 29.03.2008 21:09