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

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

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2016, 08:42   #1
s-r-grass
Новичок
Джуниор
 
Регистрация: 30.08.2016
Сообщений: 1
По умолчанию AnsiCompareText и txt базы

Здравствуйте, сразу предупреждаю, что я совсем новичок. Помогите пожалуйста разобраться. Нашел AnsiCompareText, и с её помощью пытаюсь сравнить названия программ с базой в текстовом файле.

Основной вопрос в этих двух строках
Result:= AnsiCompareText(s, d);
if Result=(0) then begin
Тут я пытаюсь сравнить две переменные, в которые считывает строки из текстового файла, и соответственно результат сравнения присваиваем переменной Result. Прочитал, что 0 означает совпадение. И далее пытался сделать условие, что если совпало, тогда записываем в таблицу.

Суть проблемы в том, что с Result=(0) он ничего не записывает в таблицу, если поставить 1 или -1, тогда он просто либо всё подряд записывает, либо случайным образом.

Но если прям в коде присвоить переменным s и d одинаковое значение, тогда функция срабатывает отлично.

В s и d данные подгружаются из текстовых файлов, построчно. В них как минимум одна программа точно совпадает с моего компьютера, строка 1 в 1, специально скопировал.

Ниже приведу полностью код процедуры
Код:
procedure TfMian.Button1Click(Sender: TObject);
var
   MyList: TStringList;
   MyRegistry: TRegistry;
   i: Integer;
   Str: string;
   install: TextFile;
   TempStr: String;
   //копипаст для заполнения таблицы
     s: string;   // читаем из install
     d: string;   // читаем из NameProgramm в d
     f: string;   // читаем из Rasprost
     g: string;   // читаем из License
     h: string;  // читаем из Stoimost
     j: string;  // читаем из Zamena
     k: integer; // для заполнения данных
     Result: integer; // для сравнения
     for1: integer;

begin
Cursor:= crHourGlass;
bSearch.Visible:=False;
Button1.Visible:=False;
//Получаем список установленных программ
     MyRegistry:=TRegistry.Create;
     MyList:=TStringList.Create;
     AssignFile(install, UTF8ToSys('install.txt'));
     ReWrite(install);
         with MyRegistry do
            begin
            RootKey:=HKEY_LOCAL_MACHINE;
            if OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall',
            False)=True then GetKeyNames(MyList);   // получает ключи в переменную mylist
            TempStr := MyList.Text;           // преобразуем в string
            Writeln(install, TempStr); //записываем в файл
            CloseKey;
              end;
         CloseFile(install);
          try
// подключаем текстовые файлы для дальнейшей работы с ними
      AssignFile(install, UTF8ToSys('install.txt'));
      Reset(install);
      AssignFile(NameProgramm, UTF8ToSys('NameProgramm.txt'));
      Reset(NameProgramm);
      AssignFile(Rasprost, UTF8ToSys('Rasprost.txt'));
      Reset(Rasprost);
      AssignFile(License, UTF8ToSys('License.txt'));
      Reset(License);
      AssignFile(Stoimost, UTF8ToSys('Stoimost.txt'));
      Reset(Stoimost);
      AssignFile(Zamena, UTF8ToSys('Zamena.txt'));
      Reset(Zamena);
          //делаем, пока не конец файла:
       while not Eof(install) do begin

            Cursor:= crHourGlass;
            Readln(install, s); //читаем в s очередную строку
            Readln(NameProgramm, d);
            Readln(Rasprost, f); //читаем в f очередную строку
            Readln(License, g);
            Readln(Stoimost, h);
            Readln(Zamena, j);
//пытаемся сравнить, и результат записать
               Result:= AnsiCompareText(s, d);
               if Result=(0) then begin
         // далее нужно записать что нашли в таблицу 
                 StringGrid1.RowCount:= StringGrid1.RowCount + 1;
                 k:= StringGrid1.RowCount;
                 SetLength(d, (k * 15));
                 StringGrid1.Cells[0, StringGrid1.RowCount-1]:= s;
                 StringGrid1.Cells[1, StringGrid1.RowCount-1]:= f;
                 StringGrid1.Cells[2, StringGrid1.RowCount-1]:= g;
                 StringGrid1.Cells[3, StringGrid1.RowCount-1]:= h;
                 StringGrid1.Cells[4, StringGrid1.RowCount-1]:= j;
              end;

              end;
   finally
      CloseFile(install);
      CloseFile(NameProgramm);
      CloseFile(Rasprost);
      CloseFile(License);
      CloseFile(Stoimost);
      CloseFile(Zamena);
      Cursor:= crDefault;
   end;  //try
end;
Заранее благодарен!

PS: Проект опенсоурсный, если потребуется, приложу базу или весь проект.

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 30.08.2016 в 09:28.
s-r-grass вне форума Ответить с цитированием
Старый 30.08.2016, 12:15   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

вы уверены что во ВСЕХ файлах у вас ANSI а не разброд и шатание( где-то UTF, где-то ANSI, где-то вообще "неизвестно что") ?
Readln(install, s); //читаем в s очередную строку
НИЧЕГО не знает о кодировках и "читает" как есть. ANSI так ANSI, UTF так UTF.

Цитата:
Нашел AnsiCompareText,
P.S. есть еще и UTF8CompareText
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение базы (IBExpert) из txt-файла в C Builder Psayker Помощь студентам 0 01.06.2014 23:41
Переделавание кода на считывание из файла в файл output.txt input.txt !!! airesjke Помощь студентам 0 29.05.2013 14:07
Как скопировать текст с файла 1.txt и записать в 2.txt Kasper1 Общие вопросы по Java, Java SE, Kotlin 1 14.12.2010 05:56
Сравнение файла*.txt с таблицой из базы данных Zeml2007 Помощь студентам 0 07.12.2009 14:09
Как прочесть txt файл www.site.ru/info.txt BR17UY Работа с сетью в Delphi 1 16.04.2007 13:01