IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Не работает поиск в программе, С++ Builder 6
Neon6868
сообщение 23.08.2009 11:24
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Есть файл, текст в котором в кодировке DOS. Если в поиске ввожу слово, имеющееся в файле, то программа ничего не находит. Если же это слово скопировать из файла, то все отлично работает. Кодировку текста меняю с помощью функции OemToChar. Текст состоит из 3 столбцов.

Вот эта функция
void __fastcall TForm1::Button5Click(TObject *Sender)
{
  AnsiString filename=Edit1 -> Text;
  FILE* f;
  f=fopen(filename.c_str(),"r");
  char string[129],*s;
  int i=0,j=0,k=0,metka=0,num=1;
  char *str1="                   ",*str2="                   ", name[150],*var1,*var2;
  while (fgetc(f)!='|');
  fseek(f,1,SEEK_CUR);
  long int save=ftell(f);
  char *text;
  text=Edit2 -> Text.c_str();
  i=0;
  while (text[i]!='\0')
  {
  j=0;
  while (((text[i]!=' ')) && (text[i]!='\0'))
  {
    if (num==1) str1[j]=text[i];
    if (num==2) str2[j]=text[i];
    i++;
    j++;
  }
  i++;
  num++;
  }
  for (i=strlen(str1);i!=0;i--) if (str1[i]==' ') str1[i]=0;
  for (i=strlen(str2);i!=0;i--) if (str2[i]==' ') str2[i]=0;
  while(!feof(f))
  {
    fseek(f,save,SEEK_SET);
    for (i=0;i<83;i++)
    {
      s=fgets(string,129,f);
      OemToChar(string,string);
      for (j=0;j<86;j++) string[42+j]=0;
      string[0]=' ';

      j=1;
      if (string[j]!=' ')
      {
        for (k=0;k<50;k++) name[k]=0;
        while ((string[j]!=' ') && (j<40))
        {
          name[j-1]=string[j];
          j++;
        }
      }
      if ((strstr(string,str1)) && (strstr(string,str2)) )
      {
        for (j=0;j<strlen(name);j++) string[j+1]=name[j];
        RichEdit1->Lines->Add(string);
      }
    }

    fseek(f,save,SEEK_SET);
    for (i=0;i<83;i++)
    {
      s=fgets(string,129,f);
      OemToChar(string,string);
      for (j=0;j<43;j++) string[j]=' ';
      for (j=0;j<43;j++) string[42*2+j]=0;
      for (j=0;j<43;j++)
      {
        string[j]=string[42+j];
        string[42+j]=0;
      }
      j=1;
      if (string[j]!=' ')
      {
        for (k=0;k<50;k++) name[k]=0;
        while ((string[j]!=' ')&& (j<40))
        {
          name[j-1]=string[j];
          j++;
        }
      }
      if ((strstr(string,str1)) && (strstr(string,str2)) )
      {
        for (j=0;j<strlen(name);j++) string[j+1]=name[j];
        RichEdit1->Lines->Add(string);
      }
    }

    fseek(f,save,SEEK_SET);
    for (i=0;i<83;i++)
    {
      s=fgets(string,129,f);
      OemToChar(string,string);
      for (j=0;j<86;j++) string[j-1]=' ';
      for (j=0;j<43;j++)
      {
        string[j]=string[84+j];
        string[84+j]=0;
      }
      string[42]=' ';
      j=1;
      if (string[j]!=' ')
      {
        for (k=0;k<50;k++) name[k]=0;
        while ((string[j]!=' ') && (j<40))
        {
          name[j-1]=string[j];
          j++;
        }
      }
      if ((strstr(string,str1)) && (strstr(string,str2)) )
      {
        for (j=0;j<strlen(name);j++) string[j+1]=name[j];
        if ((metka==0) && !(strchr(s,'|'))) RichEdit1->Lines->Add(string);
      }
    }

    s=fgets(string,129,f);
    save=ftell(f);
  }
  fclose(f);
  for (i=0;i<strlen(str1);i++) str1[i]=' ';
  for (i=0;i<strlen(str2);i++) str2[i]=' ';
}


Сообщение отредактировано: Neon6868 - 23.08.2009 11:26
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 1.08.2025 18:20
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"