Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Поиск по символам в txt файле и вывод результатов в StringGrid

13.07.2011, 17:27. Показов 4149. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые программисты и не.
В работе над базой данных жильцов столкнулся с двумя проблемами при осуществлении поиска:
1. проблема - как найдти искомый txt файл в папке где хранятся файлы базы по первым символам в названии, и загрузить его в StringGrid?
и более углубленный поиск:
2. проблема - как найдти искомую запись в txt файле по первым символам в фамилии и вывести все совпадения в StringGrid?
Плиз Хелп.

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

Добавлено через 1 час 1 минуту
Вот пробую это использовать но пока без результатов...
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void __fastcall TForm1::Button1Click(TObject *Sender){
 
        char  first_char    = 'А';
        char  last_char    = 'Т';
 
        TStringList*  file1 = new TStringList();
        TStringList*  file2 = new TStringList();
        AnsiString    str    = "";
 
        file1->LoadFromFile("words.txt");  // открываем файл в список строк, очень удобный объект
        if(! file1->Count) {
            delete file1;
            delete file2;
            file1 = file2 = NULL;
            return;
        }
 
        for(int i = 0; i < file1->Count; i++) {  // здесь разбираем строки на слова и сравниваем
              file1->Strings[i] += " ";
              for(int a = 1; a < file1->Strings[i].Length(); a++) {
                   if(IsCharAlphaA(file1->Strings[i][a]))
                         str += file1->Strings[i][a];
                   else {
                         if(str.Length() > 2) {
                             if( str[1] == first_char && str[ str.Length()] == last_char) {
                                  file2->Add(str);  
                                  ListBox1->Items->Add(str);   // найденое слово добавить в список
                             }
                         }
                         str = "";
                   }
              }
        }
 
        file2->SaveToFile("word.txt");  // сохранить список найденных слов в другой файл
        delete file1;
        delete file2;
        file1 = file2 = NULL;
}
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.07.2011, 17:27
Ответы с готовыми решениями:

Поиск в одном StringGrid-е и вывод результатов в другой
Здравствуйте уважаемые программисты,нужна Ваша помощь. Имеется 2 формы,на каждой из них расположен Стринггрид. Нужно сделать так,что...

Как реализовать поиск текста в .txt файле с выводом всех возможных результатов в ListBox?
Здравствуйте! Задачка вот какая. Если документ &quot;1234.txt&quot;. В нём содержится примерно такой текст: ABC BCA BBA ACB AAB ...

Поиск в файле и вывод результатов
Помогите написать. Условие: В файле &quot;Имя , Фамилия , телефон , Год рождения&quot;.Пользователь запрашивает по телефону Имя и Фамилию...

29
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.07.2011, 20:28
C++
1
2
3
4
5
6
char first_char = 'А';
char last_char = 'Т';
AnsiString filename = /*Сюда грузишь имя своего файла*/;
char character = filename[1]; /* получаем первый символ */
if (character == first_char) {/*Расслабляешься по полной*/}
// как найти последний символ в строке тебе, надеюсь, рассказывать необходимости нет ...
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
13.07.2011, 22:07  [ТС]
Этот вариант я гдето скатал на форуме, меня этот код только спонту сбил...

мне конкретно вот что нужно:
шаг первый - В Edit1 я ввожу три символа (или один или два или четыре)
шаг второй - Кликаю поиск
шаг третий - Считываю с Edit1
шаг четвертый - Проверяю все txt файлы (файлов может быть 700) в одной папке путь к которой мне известен
вывожу в StringGrid1 построчно все найденные варианты + названия файлов где они были найдены
шаг пятый - выделяю нужный мне вариант и вывожу txt файл в котором он был найден в StringGrid1
шаг шестой - иду пить кофе
как это сочинение перевести на С++

Добавлено через 12 минут
забыл сказать что символы кирилические
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
14.07.2011, 01:03
1. Use FindFirst and FindNext to read a directory
2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
AnsiString tmp, filename,character,buf;
tmp = Edit1->Text;
buf = "путь, который известен";
TSearchRec sr;
if (FindFirst(buf.c_str(), faAnyFile, sr) == 0)
{
  do {
    filename = sr.Name; 
    if (tmp.Length == 1) {
      character = filename[1];
    }
    else if (tmp.Length == 2) {
      character = ExtractString(filename,1,2);
    }
    else if (tmp.Length == 3) {
      character = ExtractString(filename,1,3);
    }
  } while (FindNext(sr) == 0);
  FindClose(sr);
  if (character == tmp) {
    // делаешь свои дела
  }
}
3. Завязываешь с кофе и начинаешь экономить на давно тобой забытый original .
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
14.07.2011, 09:54  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
3. Завязываешь с кофе и начинаешь экономить на давно тобой забытый original .
Буду переваривать этот вариант поиска, спасибо
Спасибо буду работать над собой
На фоне этого мировой экономический кризис меркнет.

Добавлено через 6 минут
Скинь мне в личку адресок я тебе посылочку отправлю с этим

Добавлено через 7 минут
Или сюда samrisbe@gmail.com


Добавлено через 30 минут
По второму варианту такая картина:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
AnsiString tmp, filename,character,buf;
   tmp = Edit1->Text;
   buf = "Adresa";
   TSearchRec sr;
   if (FindFirst(buf.c_str(), faAnyFile, sr) == 0)
   {
   do {
    filename = sr.Name;
    if (tmp.Length == 1) {
      character = filename[1];
    }
    else if (tmp.Length == 2) {
      character = ExtractString(filename,1,2);
    }
    else if (tmp.Length == 3) {
      character = ExtractString(filename,1,3);
    }
   } while (FindNext(sr) == 0);
   FindClose(sr);
   if (character == tmp) {
   StringGrid1->RowCount = ExtractString(filename,1,3); // Загружаю результаты поиска
  }
 }
ошибки
C++
1
2
3
4
5
6
[BCC32 Error] Unit1.cpp(400): E2235 Member function must be called or its address taken
[BCC32 Error] Unit1.cpp(403): E2235 Member function must be called or its address taken
[BCC32 Error] Unit1.cpp(404): E2268 Call to undefined function 'ExtractString'
[BCC32 Error] Unit1.cpp(406): E2235 Member function must be called or its address taken
[BCC32 Error] Unit1.cpp(407): E2268 Call to undefined function 'ExtractString'
[BCC32 Error] Unit1.cpp(412): E2268 Call to undefined function 'ExtractString'
может шо надо инклуднуть, не знаю в чем проблема.
Кто нибудь подправте пока LK не увидел как я над его кодом надругался
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
14.07.2011, 15:14
Подправляю, прикрыв глаза :
1. Member function must be called or its address taken - значит, где-нибудь пропущены скобки () (догадайся сам, где ) - любимый способ проверки ленивых копипейстеров на сообразительность - , и легкий способ запомнить довольно часто встречающуюся ошибку.
2. ExtractString - может, какая буковка пропущена, остальное - см. вышее . И ты эту лабуду знаешь:
C++
1
2
3
Sysutils::TSysCharSet Tws,Tcs;
Tcs<<','; // разделитель
ExtractStrings(Tcs,Tws,Stroka.c_str(),ListBox->Items);
Хотя в примере я это написАл на "автопилоте" вместо извлечения подстроки, гламурнее так:
C++
1
2
3
4
5
// 1.
int len = tmp.Length();
// дальше все tmp.Length() заменить на len
// 2.
character=filename.SubString(0,2);
и т.д.
И это не "второй вариант", а поиск твоего файла, а по ссылке - занос в грид с прибамбасами .
3. По поводу "оригинала" - пусть так и остается мечтой . А за само намерение - большущая благодарность .
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
14.07.2011, 21:09  [ТС]
LK ну хоть убей меня я в упор невижу где ошибка
C++
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
26
27
28
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   AnsiString tmp, filename,character,buf;
   tmp = Edit1->Text;
   buf = "Adresa";
   TSearchRec sr;
   int len = tmp.Length();
   character = filename.SubString(0,2);
   if (FindFirst(buf.c_str(), faAnyFile, sr) == 0)
   {
   do {
        filename = sr.Name;
        if (len == 1) {
          character = filename[1];
        }
        else if (len == 2) {
          character = ExtractString(filename,1,2);
        }
        else if (len == 3) {
          character = ExtractString(filename,1,3);
        }
   } while (FindNext(sr) == 0);
   FindClose(sr);
   if (character == tmp) {
   StringGrid1->RowCount = ExtractString(filename,1,3); // Загружаю результаты поиска
  }
 }
}

C++
1
2
3
[BCC32 Error] Unit1.cpp(403): E2268 Call to undefined function 'ExtractString'
[BCC32 Error] Unit1.cpp(406): E2268 Call to undefined function 'ExtractString'
[BCC32 Error] Unit1.cpp(411): E2268 Call to undefined function 'ExtractString'
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
14.07.2011, 21:45
ExtractStrings, и я же сказал, не надо это ...
попробуй наподобие этого
C++
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
26
27
28
29
30
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString tmp, filename,character,buf;
  tmp = Edit1->Text;
  buf = "disc:\\papka"; //
  TSearchRec sr;
  int cnt;
  int len = tmp.Length();
  if (FindFirst(buf.c_str(), faAnyFile, sr) == 0) {
    do {
      filename = sr.Name;
      if (len == 1) {
        character = filename[1];
        cnt++;
      }
      else if (len == 2) {
        character = filename.SubString(0,2);
        cnt++;
      }
      else (len == 3) {
        character = filename.SubString(0,3);
        cnt++;
      }
    } while (FindNext(sr) == 0);
    FindClose(sr);
   }
  if (character == tmp) {
    StringGrid1->RowCount = cnt; // Загружаю результаты поиска
  }
}
Добавлено через 19 минут
упростим
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TSearchRec sr;
  AnsiString character,filename,path,tmp,;
  int cnt,go,len;
  // у тебя путь, естественно, свой
  path = ExtractFilePath(Application->ExeName)+"papka\\*.*";
  tmp = Edit1->Text;
  len = tmp.Length();
  go = FindFirst(path,faAnyFile,sr);
 
  while (!go) {
    filename = sr.Name;
    if (len == 1) {
      character = filename[1];
      cnt++;
      StringGrid1->RowCount = cnt; // Загружаю результаты поиска
      // и заполнять грид, я так понимаю, тоже надо в цикле
      if (character == tmp) {
        // заполняешь StringGrid1
      }
    }
    else if (len == 2) {
      character = filename.SubString(0,2);
      cnt++;
      StringGrid1->RowCount = cnt; // Загружаю результаты поиска
      // и заполнять грид, я так понимаю, тоже надо в цикле
      if (character == tmp) {
        // заполняешь StringGrid1
      }
    }
    else (len == 3) {
      character = filename.SubString(0,3);
      cnt++;
      StringGrid1->RowCount = cnt; // Загружаю результаты поиска
      // и заполнять грид, я так понимаю, тоже надо в цикле
      if (character == tmp) {
        // заполняешь StringGrid1
      }
    }
  }
  FindClose(sr);
}
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
14.07.2011, 21:58  [ТС]
Компелирует нормально, а в StringGrid1 файл не загружает.
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
14.07.2011, 23:14
Мне неведом ход твоих умозаклюсений, что естественно , однако, если речь идет об имени файла, то я бы использовал ListBox или ComboBox, что в таком случае гламурнее . А уже при клике на строке ListBox'а или ComboBox'а загружал файл в StringGrid1, делая ему перед этим , наприер, Clear.
извращаемся дальше
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// объявляем глобально
AnsiString character,filename,tmp,;
int cnt,len;
// упрощаем себе жизнь
// не забываем прописать протоип в заголовочном файле
// private:  // User declarations 
// void __fastcall FindAndFill(TStringGrid *StringGrid1);
void __fastcall TForm1::FindAndFill(TStringGrid *StringGrid1)
{  
  filename = sr.Name;
  character = filename.SubString(0,len);
  cnt++;
  StringGrid1->RowCount = cnt; // Загружаю результаты поиска
  // и заполнять грид, я так понимаю, тоже надо в цикле
  if (character == tmp) {
    // заполняешь StringGrid1
    for (i=0;i<=cnt;i++) {
       StringGrid1->Cells[0][i] = filename;
    }
    // или как ты делал в самом первом сообщении
    // ListBox1->Items->Add(filename);
  }
}
//-----------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TSearchRec sr;
  AnsiString path;
  int go;
  // у тебя путь, естественно, свой
  path = ExtractFilePath(Application->ExeName)+"papka\\*.*";
  tmp = Edit1->Text;
  len = tmp.Length();
  go = FindFirst(path,faAnyFile,sr);
 
  while (!go) {
    if (len == 1) FindAndFill();
    else if (len == 2) FindAndFill();
    else if (len == 3) FindAndFill();
    else
      ShowMessage("Файл с заданными параметрами не найден.");
  }
  FindClose(sr);
}
проверить не могу по причине наличия отсутствия Билдера .
2. проблема - как найдти искомую запись в txt файле по первым символам в фамилии и вывести все совпадения в StringGrid?
заносишь все строки из файла в StringList, указываешь DelimitedText = true и в качестве разделителя - пробел, потом делаешь в цикле наподобие
C++
1
2
3
4
5
6
7
8
9
for (i=0;i<=StringList->Count-1;i++) {
  if (character == StringList->Strings[i].SubString(0,len) {
    for (int i = 1; i < StringGrid1 -> ColCount;i++) {
      for (int j = 1; j < StringGrid1 -> RowCount;j++) {
        StringGrid1->Cells[j][i] = StringList->Strings[i];
      }
    }
  }
}
дополнительно, чтобы не проверять все слова, и исходя из того, что фамилии начинаются с БОЛЬШОЙ буквы, проверяешь, является ли первая буква строки БОЛЬШОЙ, хотя, если слово, не являющееся фамилией, стоит в начале предложения, оно будет добавлено, что естественно. Если это обычный текстовый файл, следует поудалять точки-запятые-тире-и.другие.всевозможные.знаки. Короче, та еще работа, для хорошего морфологического парсера. Ну, а если это фамилии из текстовой базы, где ничего другого нет, то можно спокойно пойти пить пиво, а утром на свежую голову между двумя перекурами накропать код.
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
15.07.2011, 00:49  [ТС]
проверить не могу по причине наличия отсутствия Билдера
А в какой тогда среде работаеш?

Добавлено через 8 минут
Я не удержался и в очередной раз сделал копипасте и вот что получилось:
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//---------------------------------------------------------------------------
// объявляем глобально
AnsiString character,filename,tmp;
int cnt,len;
 
void __fastcall TForm1::FindAndFill(TStringGrid *StringGrid1)
{
  filename = sr.Name;
  character = filename.SubString(0,len);
  cnt++;
  StringGrid1->RowCount = cnt; // Загружаю результаты поиска
 
  // и заполнять грид, я так понимаю, тоже надо в цикле
  if (character == tmp) {
    for (i=0;i<=cnt;i++) {
       StringGrid1->Cells[0][i] = filename; // заполняешь StringGrid1
    }
  }
}
 
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TSearchRec sr;
  AnsiString path;
  int go;
  path = ExtractFilePath(Application->ExeName)+"c:User\Samrisbe\Desktop\Заказ\Adresa";
  tmp = Edit1->Text;
  len = tmp.Length();
  go = FindFirst(path,faAnyFile,sr);
 
  while (!go) {
    if (len == 1) FindAndFill();
    else if (len == 2) FindAndFill();
    else if (len == 3) FindAndFill();
    else
      ShowMessage("Файл с заданными параметрами не найден.");
  }
  FindClose(sr);
}
//---------------------------------------------------------------------------

ошибки:
C++
1
2
3
4
5
[BCC32 Error] Unit1.cpp(392): E2451 Undefined symbol 'sr'
[BCC32 Error] Unit1.cpp(399): E2451 Undefined symbol 'i'
[BCC32 Error] Unit1.cpp(422): E2193 Too few parameters in call to '_fastcall TForm1::FindAndFill(TStringGrid *)'
[BCC32 Error] Unit1.cpp(423): E2193 Too few parameters in call to '_fastcall TForm1::FindAndFill(TStringGrid *)'
[BCC32 Error] Unit1.cpp(424): E2193 Too few parameters in call to '_fastcall TForm1::FindAndFill(TStringGrid *)'
Unit1.h
C++
1
2
private:    // User declarations
       void __fastcall FindAndFill(TStringGrid *StringGrid1);
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.07.2011, 00:59
1. По средам я не работаю .
2. Слушай , ну, ошибки-то у меня элементарные, мог бы и сам поисправлять :
C++
1
2
3
[BCC32 Error] Unit1.cpp(422): E2193 Too few parameters in call to '_fastcall TForm1::FindAndFill(TStringGrid *)'
[BCC32 Error] Unit1.cpp(423): E2193 Too few parameters in call to '_fastcall TForm1::FindAndFill(TStringGrid *)'
[BCC32 Error] Unit1.cpp(424): E2193 Too few parameters in call to '_fastcall TForm1::FindAndFill(TStringGrid *)'
C++
1
2
3
if (len == 1) FindAndFill(StringGrid1);
        else if (len == 2) FindAndFill(StringGrid1);
        else if (len == 3) FindAndFill(StringGrid1);
я тебя и так, и сяк отвлекаю от кофе, которого много тоже плохо, а ты все "не удержался" да "не удержался" ...
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
15.07.2011, 23:56  [ТС]
Целый день с тремя перекурами я пытаюсь решить задачу не выпив даже не одной чашки :cofee:
Ивот что получилось:
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// объявляем глобально
AnsiString character,filename,tmp;
int cnt,len;
 
void __fastcall TForm1::FindAndFill(TStringGrid *StringGrid1)
{
  TSearchRec sr;
  filename = sr.Name;
  character = filename.SubString(0,len);
  cnt++;
  StringGrid1->RowCount = cnt; // Загружаю результаты поиска
  // и заполнять грид, я так понимаю, тоже надо в цикле
  if (character == tmp) {
    // заполняешь StringGrid1
    for (int i=0;i<=cnt;i++) {
       StringGrid1->Cells[0][i] = filename;
    }
  }
}
 
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  StringGrid1->Visible = true;
  TSearchRec sr;
  AnsiString path;
  int go;
 
  path = ExtractFilePath(Application->ExeName)+"c:User\Samrisbe\Desktop\Заказ\Adresa";
  tmp = Edit1->Text;
  len = tmp.Length();
  go = FindFirst(path,faAnyFile,sr);
 
  while (!go) {
    if (len == 1) FindAndFill(StringGrid1);
    else if (len == 2) FindAndFill(StringGrid1);
    else if (len == 3) FindAndFill(StringGrid1);
    else
      ShowMessage("Файл с заданными параметрами не найден.");
  }
  FindClose(sr);
}
//---------------------------------------------------------------------------
Все компелируется а в StringGrid1 не грузится и ShowMessag "Файл с заданными параметрами не найден тоже нет.
Я подозреваю что вот это надо кудато прикрутить, да вот отвертки нет подходящей
C++
1
2
3
4
5
6
7
8
9
for (i=0;i<=StringList->Count-1;i++) {
  if (character == StringList->Strings[i].SubString(0,len) {
    for (int i = 1; i < StringGrid1 -> ColCount;i++) {
      for (int j = 1; j < StringGrid1 -> RowCount;j++) {
        StringGrid1->Cells[j][i] = StringList->Strings[i];
      }
    }
  }
}
sorry for my С++
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.07.2011, 00:13
прикрути его вместо
C++
1
2
3
4
        // заполняешь StringGrid1
        for (int i=0;i<=cnt;i++) {
           StringGrid1->Cells[0][i] = filename;
        }
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
16.07.2011, 00:26  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
прикрути его вместо
C++
1
2
3
4
        // заполняешь StringGrid1
        for (int i=0;i<=cnt;i++) {
           StringGrid1->Cells[0][i] = filename;
        }
Я так и сделал а он тогда ошибку выдает:

C++
1
2
3
[BCC32 Error] Unit1.cpp(400): E2451 Undefined symbol 'i'
[BCC32 Error] Unit1.cpp(400): E2451 Undefined symbol 'StringList'
[BCC32 Error] Unit1.cpp(401): E2377 If statement missing )
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.07.2011, 00:31
гм, зачем там два раза TSearchRec sr;? один другого не видит ... надо отвыкать от копипейста ... пробуй так
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// объявляем глобально
AnsiString character,filename,tmp;
int cnt,len;
TSearchRec sr;
//... 
void __fastcall TForm1::FindAndFill(TStringGrid *StringGrid1)
{
//  TSearchRec sr;
  filename = sr.Name;
  character = filename.SubString(0,len);
  cnt++;
  StringGrid1->RowCount = cnt; // Загружаю результаты поиска
  // и заполнять грид, я так понимаю, тоже надо в цикле
  if (character == tmp) {
    // заполняешь StringGrid1
    for (int i=0;i<=cnt;i++) {
      StringGrid1->Cells[0][i] = filename;
    }
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  StringGrid1->Visible = true;
//  TSearchRec sr;
  AnsiString path;
  int go;
 
  path = ExtractFilePath(Application->ExeName)+"c:User\Samrisbe\Desktop\Заказ\Adresa";
  tmp = Edit1->Text;
  len = tmp.Length();
  go = FindFirst(path,faAnyFile,sr);
 
  while (!go) {
    if (len == 1) FindAndFill(StringGrid1);
    else if (len == 2) FindAndFill(StringGrid1);
    else if (len == 3) FindAndFill(StringGrid1);
    else
      ShowMessage("Файл с заданными параметрами не найден.");
  }
  FindClose(sr);
}
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
16.07.2011, 00:54  [ТС]
Я раньше с таким не сталкивался, что за беда
Все компилируется а в Grid не выводет я даже на всякий случай изменил дирикторию поиска и перенес туда папку
C++
1
 path = ExtractFilePath(Application->ExeName)+"c:Windows\Program Files(x86)\Adresa";
а результат нуль, если такой магистр как ты не находит в чем дело то мне воще ...

Добавлено через 4 минуты
Вчера ты мне ссылку дал где хороший пример поиска и вывода в StringGrid он правда все содержимое папки грузит, на крайняк можно в StringGrid искать у меня вроде есть код для поиска в StringGrid останется только выводить выделенное в StringGrid название файла в StringGrid
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.07.2011, 01:27
1.
C++
1
2
path = ExtractFilePath(Application->ExeName)+
       "c:Windows\Program Files(x86)\Adresa";
это ты как понимаешь ? я, например, так, если проект у меня по этому пути, например: С:\\Temp\\MySuperPuperProg, то мы в твоем варианте пути получим
path = С:\\Temp\\MySuperPuperProg\\+c:Windows\P rogram Files(x86)\Adresa;
- как ты себе представляешь такой путь ?
Ну и двойные слеши в путях я за тебя ставить буду :
path = ExtractFilePath(Application->ExeName)+
"c:Windows\\Program Files(x86)\\Adresa";
?
т.е., в твоем варианте ExtractFilePath(Application->ExeName)+ лишнее, имхо, поскольку ты задешь абсолютный, а не относительный путь.
2. напиши
C++
1
while (go)
и про всяких магистров не надо, я просто уставший человек без Билдера , но с такими друзьями, как уважаемый Samrisbe и уважаемый Programmer., наверное, придется ставить .
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
16.07.2011, 01:28  [ТС]
Я туда просто скопировал паку с файлами под названием Adresa
Ура LK начнет работать по средам!
По такому случаю у меня есть для тебя подарок отправляю его в личку.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.07.2011, 01:30
2. "по средам" - я имел ввиду день недели после вторника и перед четвергом .
1. кабы еще та личка работала .
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2011, 01:30
Помогаю со студенческими работами здесь

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

Поиск в .txt файле и вывод на экран
Такая проблема, необходимо осуществить поиск слова в .txt файле , если данной слово найдено, то распечатать строку с этим словом, и...

Поиск в файле по первым символам
Есть такой текстовый файл с данными. 019Dima 412Olis 618Simon 414Sipter 311Unimiles 217Gioler 306Ominus 003Filters

Поиск значения в txt файле по значению из другого txt
Добрый день. Подскажите пожалуйста как осуществить поиск значения в txt файле по значению из другого txt с помощью bat файла. Суть...

Что лучше реализовать - поиск по stringgrid или поиск по источнику его данных (txt)
здравствуйте, нужно в программу добавить функцию поиска, данные из stringgrid хранятся в txt файле и подгружаются в таблицу, посоветуйте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru