Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ввод файла с помощью цикла в Builder'e, работа с файлами 
:(
    Опции темы
codelord
Дата 29.4.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Цитата(Anikmar @  29.4.2007,  08:31 Найти цитируемый пост)

Допустим, у нас есть только файлы с номерами 1 и 5000. Для того, чтобы обработать всего 2 файла, потребуется проход минимум 5000 циклов и 4998 холостых попыток открыть два файла! Точно не мой стиль! Причем второй-то файл успешно открывается и закрывается в холостую. Хоть бы открытие за проверку вынесли что ли.

твой первый вариант и что ? нету файла что ты будешь делать ? наверно писать continue ?
Ко всему прочему напиши 5000 пусть будет в холостую посмотри сколько займет времени у процессора.
и третье
Цитата(Anikmar @  29.4.2007,  08:31 Найти цитируемый пост)
Хоть бы открытие за проверку вынесли что ли.

я код исправлял а не писал думаю это понятно.

Добавлено через 11 минут и 38 секунд
Цитата(AFenix85 @  29.4.2007,  09:05 Найти цитируемый пост)
Я имел ввиду здесь взять из ch произвольный симв массив,мне потом сортировать их надо будет

не понял, покажи пример строки и что надо взять и куда взять.


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Anikmar
Дата 29.4.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(codelord @  29.4.2007,  13:36 Найти цитируемый пост)
твой первый вариант и что ? нету файла что ты будешь делать ? наверно писать continue ?

Ну зачем так бурно реагировать?  smile 
Свой первый вариант я тоже назвал в лоб и 
Цитата(Anikmar @  29.4.2007,  11:38 Найти цитируемый пост)
не очень качественный.

А почему мой маленько быстрее будет? Потому, что вызов функции FileExists - единственная проверка.
А вашем варианте она будет через функцию открытия файла. Т.е., вы вызываете функцию открытия файла, она проверяет его наличие, и в случае отсутствия возвращает ошибку.

Цитата(codelord @  29.4.2007,  13:36 Найти цитируемый пост)
я код исправлял а не писал думаю это понятно.

Ну дайте, я немного позанудствую. Уж исправлали бы и это  smile 

А вообще - странный подход все-таки, согласитесь. Перебирать все возможные имена файлов в цикле вместо того, чтобы взять их действительный список... Ну программирование оно на то и творчество - нравится так, значит делайте так. Работает то правильно - а это все-таки главное.

не понял, покажи пример строки и что надо взять и куда взять. 
Я понял так, что человек спрашивает каким образом взять подстроку из символьного массива.

AFenix85, Предлагаю воспользоваться функцией strncpy (посмотрите хелп по ней). Только не забудьте добавить 0 в конец результирующей строчки.

PM MAIL ICQ   Вверх
AFenix85
Дата 29.4.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Вобщем из строки ch мне надо выбрать строку,которая читается из Edita.То есть сравнить и найти колличество пробелов до этого сравнения!


Вот например кусок ch="   tm55   tm60   tm65   tm70   tm75   tm80   tm85   tm90   vx55".Он читается автоматически в проге из файла!
В Edite пусть будет написано tm85!Как сравнить эти два разных типа и провести учет пробелов! smile 

А потом мне надо будет произвести считывания и других строк с уже известного "пробела" числа для его обработки smile 


Код

char str[] = "Это пример строки которая была, А это будет показано. Вот так!";
AnsiString substr(str);
ShowMessage(substr.SubString(33,20 ));


 

Это немного не то,что мне надо было! 
PM MAIL   Вверх
Anikmar
Дата 29.4.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



P.S.
codelord,  за плюсы спасибо  smile

Добавлено через 1 минуту и 58 секунд
AFenix85, вам чистый Си++ нужен? через AnsiString мне кажется удобнее малехо будет
PM MAIL ICQ   Вверх
AFenix85
Дата 29.4.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Цитата(Anikmar @  29.4.2007,  13:58 Найти цитируемый пост)
А вообще - странный подход все-таки, согласитесь. Перебирать все возможные имена файлов в цикле вместо того, чтобы взять их действительный список... Ну программирование оно на то и творчество - нравится так, значит делайте так. Работает то правильно - а это все-таки главное.


Я не виноват,мне дали файлы и сказали их посчитать по особому smile 
А мне куда деваться,вот и ищу пути побыстрее сделать прогу smile  

Цитата(Anikmar @  29.4.2007,  14:00 Найти цитируемый пост)
AFenix85, вам чистый Си++ нужен? через AnsiString мне кажется удобнее малехо будет 


Я не понимаю как это использовать,потому и не использую smile 
PM MAIL   Вверх
Anikmar
Дата 29.4.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(AFenix85 @  29.4.2007,  14:13 Найти цитируемый пост)
Я не понимаю как это использовать,потому и не использую   

В общем то использовать базовые вещи языка можно, но более сложные вещи уже реализованы и в STL и в VCL - тут дело вкуса. Есть стандартные строковые типы данных, в которых реализован поиск в строке подстроки.

На примере чистого Си я уже не помнб есть ли функция поиска строки в подстроке
В VCL есть StrPos

Нам надо найти строку в подстроке, а затем с найденной позиции посчитать количество пробелов слева.
PM MAIL ICQ   Вверх
codelord
Дата 29.4.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



приблизительно так (там где идет считывание из файла) 
допустим то что ищем лежит в Edit3
Код

  while ( fgets(ch,80, p) )
         {
          //-----------------------
           AnsiString sub(ch);
           int k, separator = 0;
           k =  sub.Pos(Edit3->Text);
           for( int j = 0; j < k; j++ ) {
               if( ch[j]  == ' ' ) separator++;
             }
             // в separator лежит количество пробелов в считываемой строке
          //--------------------------
          fprintf(o,"%s\n",ch);
         }



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
codelord
Дата 29.4.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Цитата(Anikmar @  29.4.2007,  13:15 Найти цитируемый пост)
На примере чистого Си я уже не помнб есть ли функция поиска строки в подстроке

char *strstr(const char *s1, const char *s2);  


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
AFenix85
Дата 1.5.2007, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Цитата(codelord @  29.4.2007,  18:05 Найти цитируемый пост)
char *strstr(const char *s1, const char *s2);   


Дык в этом то и проблема,как из string из Edita, переделать в char smile  smile  smile  
PM MAIL   Вверх
Klin
Дата 1.5.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Если речь об AnsiString, то для этого функция есть: 
Код

 Edit1->Text.c_str();   



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Voldemar2004
Дата 1.5.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 1
Всего: 23



А может быть лучше так читать файл
Код
//---------------------------------------------------------------------------

#include <sstream>

#include <fstream>

std::string ReadFile(char* FileName)
{

std::stringstream buffer;

            std::string str;

            std::ifstream file(FileName);

            while( !file.eof() )
            {
                getline(file, str);       
                buffer << str << '\n';
            }

return buffer.str();

}

//---------------------------------------------------------------------------
, чем через объекты Builder'a ? Просто подключить функцию и не зависеть от свойств объектов. smile 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
AFenix85
Дата 2.5.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Voldemar2004, я это знаю, но мне надо именно в форме smile  
PM MAIL   Вверх
AFenix85
Дата 2.5.2007, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 20.4.2007
Где: Россия,Иркутск

Репутация: нет
Всего: нет



Помгите с одной проблемкой!Вот код:
Код

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  int fn,i,j,n;
  char ch[400],*s,*st;
  AnsiString FN;
  fn=StrToInt(Edit1->Text);
  j=StrToInt(Edit2->Text);
  s=Edit3->Text.c_str();
  for(i=0;i<j;i++,fn++)
  {if(fn==2365 || fn==2366)
      {fn=3001;
      }
  FN=IntToStr(fn);
  FN="ìåñÿö\\0"+FN+"V.dat";
  FILE*p=fopen(FN.c_str(),"r");
  FILE*o=fopen("one1.txt","w");
    if(!p)
      {fclose(p);
       fclose(o);
       continue;
      }
       fseek(p, 0, SEEK_SET);
       while (!feof(p))
         {
          fgets(ch,strlen(ch) + 1, p); //ïðî÷èòàëè ñòðîêó èç ôàéëà
          if(strcmp(ch,s)==0)
            {break;
            }

          fputs(ch,o);                  //çàïèñàëè åå â ôàéë



         }
  Memo1->Lines->Add(FN);
  fclose(p);
  fclose(o);

}
}


Как здесь сделать так,чтобы в ch найти s и найти длину строки ch до этого совпадения? smile 
Никак не могу с этим справиться сам!Подскажите smile  или исправте smile 
PM MAIL   Вверх
Anikmar
Дата 2.5.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Что-то в этом роде:
Код

char *p;
int LenLeft;

p = strstr(ch, s);
if (p==NULL) ... Строка не найдена
LenLeft = ch - p;

PM MAIL ICQ   Вверх
Weaver
Дата 4.5.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 2.12.2004
Где: Stavropol

Репутация: нет
Всего: нет



Ребята, извините, вот вы тут занимаетесь извратом, насколько я понял.

Задача простая, но решение у вас очень замороченное.

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

PM MAIL WWW   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0979 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.