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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись из файла в переменную 
:(
    Опции темы
Pikon
Дата 1.6.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот собственно и весь вопрос, как записать кусок файла в стринг.

У меня есть такоя вот часть кода:

Код

    i=1;
    rewind(fquelle);
        while (signstelle!=EOF)  {
            signstelle=fscanf(fquelle,"%c",&signfind);

            if(signfind=='=') {
            signfeldstelle[i]=(ftell(fquelle)-1);
            printf("Cигнал найден, номер %ld\n",signfeldstelle[i]);

            i++;

            }

        }


Этим я нахожу место с которого мне нужно начинать создавать свой стринг. Но что с этим номером символа делать не знаю. Мне нужно сохранить символы находящиеся в файле со следующего номера после номера выданного этой функцией, плюс два символа в стринг. Не подскажете функцию для этого?
PM MAIL   Вверх
ZC1989
Дата 1.6.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



Pikon, ты мог бы проще создать свой небольшой цикл перебора и поиска символа...там получилось ты нагляднее..


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Pikon
Дата 1.6.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(ZC1989 @  1.6.2007,  14:39 Найти цитируемый пост)
Pikon, ты мог бы проще создать свой небольшой цикл перебора и поиска символа...там получилось ты нагляднее.. 

Не в поиске символа проблема. Хотя найти то, что мне нужно можно только найдя знак "равно", потому что то что мне нужно идёт за знаком равно, хотя что именно там стоит, мне неизвестно. Любое число.. 

Проблема не в поиске, проблема в сохранении в переменную.
PM MAIL   Вверх
ZC1989
Дата 1.6.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

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



Pikon, а какая проблема? когда писал бы этот поиск сам то создавал бы буффер, вёл на него счётчик....всё было бы ТРУшно...

типа 

bool read = false;
char *buf = new char[strlen(FileChar)];
int counr_buf = 0;
for(int i = 0; i < strlen(FileChar); i++)
{
if(FileChar[i] == '=')
read = true;

if(read)
buf[counr_buf++] = FileChar[i];

}

вроде должно сработать...гы... - косячно конешно.... smile

Добавлено через 1 минуту и 39 секунд
ой...после цикла забыл ещё 
buf[counr_buf] = '\0';


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Dov
Дата 1.6.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Код
int main()
{
    FILE* fquelle;
    char  signfeldstelle[80];
    char  signstelle;
    int   i = 0;

    fquelle = fopen("test.txt", "rt");
    if(fquelle == NULL)
    {
        puts("Unable to open file..\n");
        exit(1);
    }
    
    while((signstelle = fgetc(fquelle)) != EOF && signstelle != '=');

    // +2 символа после '='
    fgetc(fquelle);
    fgetc(fquelle);
    
    while((signstelle = fgetc(fquelle)) != EOF)
        signfeldstelle[i++] = signstelle;
    signfeldstelle[i] = '\0';

    puts(signfeldstelle);

    fclose(fquelle);
    
    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Pikon
Дата 15.6.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за ответы ребята, немного помогло. Я применительно к своему файлу разобрался с сохранением.

У меня ещё один вопрос возник:

Вот кусок файла из которого читаю: 


Код

ModuleWare code(v1.7) for port 'clock' of type 'editedWF' 
    
mw_clockclock_Spec <= 
      '0', 
      
'1' AFTER 18 NS, 
      
'0' AFTER 58 NS, 
      
'1' AFTER 98 NS, 
      
'0' AFTER 138 NS, 
      
'1' AFTER 178 NS, 
      
'0' AFTER 218 NS;


А вот кусок проги мной набросанной:

Код

signstelle=0; 
    rewind(fquelle); 
    j=0; 
   ges=0; 
   while (signstelle!=EOF)  
   { 
      signstelle=fscanf(fquelle, "%c", &signfind); 
       if(signfind=='=') 
       { 
        j++; 
        ges=2*impulszahl[j]+2; 
        
         for(a=0;a<ges;a++){ 
            fgets(satz, 80, fquelle); 
            if (a==1) 
            { 
               //printf("%s", satz); 
               if (strstr(satz, "'0', ")) 
                  printf("Signal %d начинается с нуля ", j); 
               else 
                  printf("Signal %d начинается с единицы ", j); 

            } 

            if (a>1) 
               if (strstr(satz, " AFTER ")) 
               { 
               signalimpuls[j][a]=atoi(satz); 
                printf("%d ", signalimpuls[j][a]); 
                
               } 

         }}   
 

impulszahl[j] это перед тем вычесленная переменная показывающая длину этого куска файла (точнее количество прыжков с нуля на один и обратно). 

Как результат signalimpuls[j][a] получаю шесть ноликов (хочу иметь 18, 58...) Остальное работает. Не пойму что неправильно с этой atoi. Я в файле самом менял строку:

'1' AFTER 18 NS,  на строку AFTER 18 NS,  и всё равно ничего.
PM MAIL   Вверх
Dov
Дата 15.6.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Вместо этого:
Код

   if (strstr(satz, "AFTER")) 
               { 
               signalimpuls[j][a]=atoi(satz); 
                printf("%d ", signalimpuls[j][a]); 
                
               } 

попробуй так:
Код

char* sub_str = "AFTER";
char* buf     = strstr(satz, sub_str);
if(buf) 
{ 
    signalimpuls[j][a]=atoi(buf + strlen(sub_str)); 
        printf("%d ", signalimpuls[j][a]); 
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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