Загадка о крякозябрах

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Загадка о крякозябрах

Сообщение Sharfik » 16.01.2016 18:59:02

Давным давно написал я программу работы с напоминалками. Поскольку толком программировать не умел, и разбираться в мелочах мозгов не хватило, то все было сделано на коленке.
В чем проблема - сейчас пользователь пишет, что у него программа в хаотичном порядке портит текст комментариев, которые были к напоминаниям. Может неделю все быть хорошо, а может за день раз пять все превратится в иероглифы. Когда писал программу, то для хранения данных использовал INI файлы. А поскольку непонятно было, что в комментарии может оказаться, я перед записью его преобразовывал в строку цифр. Все это было на Turbo Delphi. Не так давно на ХабраХабр была статья, про ошибку записи байта в жестких дисках одного производителя, когда тот работал с одновременно включенным другим устройством на своей шине. На 99% уверен, что косяк мой. Но вот прочтенная история на хабре, очень удачно укладывается в мою проблему, потому что если испортить один символ, то мои функции работать не будут. Хотя кто знает.
Есть какие нибудь библиотеки чтобы сравнивать файл загруженный в память и файл на диске?
Код: Выделить всё
Function CommentEnc(Comment:string):string;
var
s,s2:string;
i,c,k:integer;
begin
c:=length(Comment);
s:='';
for i:=c downto 1 do begin
   s2:=Comment[i];
   k:=ord(s2[1]);
   if k<10 then
       s:=s+'00'+inttostr(k)
   else if (k<100)and(k>9) then
       s:=s+'0'+inttostr(k)
   else
       s:=s+inttostr(k);
end;
result:=s;
end;

Function CommentDec(Comment:string):string;
var
  s,s2:string;
  i,c,k:integer;
begin
  s:='';
  c:=length(Comment);
  i:=c-2;
  while i>0 do begin
s2:=copy(Comment,i,3);
k:=strtoint(s2);
s:=s+char(k);
i:=i-3;
end;
result:=s;
end;
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Загадка о крякозябрах

Сообщение Лекс Айрин » 19.01.2016 12:14:25

Sharfik, а если просто прогнать диск, например, Викторией?
Долго, конечно, но шанс поймать бяку есть. В принципе, она именно это и делает -- записывает данные в сектор и проверяет можно ли их корректно прочитать.

Насчет конфликта устройств... так можно ведь попробовать отключить заподозренное на вредительство устройство и погонять прогу.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград


Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

Рейтинг@Mail.ru