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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2009, 15:41   #1
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию количество строк

Мне надо найти количество строк, заполенных значениями для матриц. Вот пример текстового файла:
Код:
Код:
//matrice GHSERp pour ferrite
//temperature i[Fe/Cr] j[C/Va] l[l'ordre] valeur
0 1 0 0 -99.808 //Мне нужно считать строки между коментариями
0 1 0 1 0
0 1 0 2 3.6e10
0 1 0 3 -7.929e8
0 1 0 4 2701850
0 1 0 5 355037.737
0 1 0 6 669.67
0 1 0 7 0.00047745
0 1 0 8 -1.47721e-6
Код:

Код:
//matrice L1 pour ferrite (Fe-Cr-C/Va)
//temperature i[Fe/Cr] j[c] k[Va] l[l'ordre] m[l'ordre pour polynom] valeur
0 0 1 0 0 1 -1250000
0 0 1 0 0 2 667.7  
1 0 1 0 0 1 -1250000
1 0 1 0 0 2 667.7
Я пробовала написать маленькую функцию:
Код:

Код:
int Gibbs::readstr(FILE *f,char *str)
{
 int nb_lignes = 0;
 do
  {
     char * ok = fgets(str, 256, f);nb_lignes++;
     if (!ok)    return 0;
  } while (str[0] == '/' || str[0] == '\n');
    return nb_lignes;
}
И вставить ее непосредственно в раздел считывания значении для какой-нить матрицы:
Код:

Код:
 if (nm == 5)
    {
      int tmax = 0, imax = 0, jmax = 0, lmax = 0;
      int t , i , j , l;
      double v = 0.;
      nb_lignes = readstr(fp,str); printf("%i\n",nb_lignes);
      sscanf(str, "%d %d %d %d %lf", &t, &i, &j, &l, &v);
      GHSERp(t,i,j,l) = v;
      wasNumbers = true;
    }
Не работает...Помогите пожалуйста создать такую функцию, что бы работало
ciaonataha вне форума Ответить с цитированием
Старый 05.05.2009, 16:13   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

Вот пример:
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

int readstr(FILE *f, char *str)
{
 do
 {
  char *ok = fgets(str,256,f);
  if(!ok) return 0;
  } while(str[0]=='/' || str[0]=='\n');
 return 1;
}


int main()
{
FILE *f;
int count = 0;

char str[256];

f = fopen("111.txt","r");

while(!feof(f))
 {
  if(readstr(f,str)) count++;
  printf("%s",str);
 }
printf("\nVsego strok: %d\n",count);
fclose(f);

getch();
return 0;
}
Для приведенного вами содержимого файла выводит:
Код:
0 1 0 0 -99.808
0 1 0 1 0
0 1 0 2 3.6e10
0 1 0 3 -7.929e8
0 1 0 4 2701850
0 1 0 5 355037.737
0 1 0 6 669.67
0 1 0 7 0.00047745
0 1 0 8 -1.47721e-6
0 0 1 0 0 1 -1250000
0 0 1 0 0 2 667.7
1 0 1 0 0 1 -1250000
1 0 1 0 0 2 667.7
Vsego strok: 13
ps Только я убрал комментарий из строчки:
Код:
0 1 0 0 -99.808 //Мне нужно считать строки между коментариями
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 05.05.2009, 16:28   #3
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Мне нужно посчитать количество строк между коментариями, заполненные числами
Код:
//matrice GHSERp pour ferrite
//temperature i[Fe/Cr] j[C/Va] l[l'ordre] valeur
0 1 0 0 -99.808 //1
0 1 0 1 0          //2
0 1 0 2 3.6e10   //3
0 1 0 3 -7.929e8 //4
0 1 0 4 2701850 // i t.d до следующих коментариев..
0 1 0 5 355037.737
0 1 0 6 669.67
0 1 0 7 0.00047745
0 1 0 8 -1.47721e-6
1 1 0 0 -99.808
1 1 0 1 0
1 1 0 2 3.6e10
ciaonataha вне форума Ответить с цитированием
Старый 05.05.2009, 16:31   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Мне нужно посчитать количество строк между коментариями, заполненные числами
То есть, вариант выше не подходит?
Как я понял, нужно выдрать из такой строчки:
Код:
0 1 0 3 -7.929e8 //4
вот это:
Код:
0 1 0 3 -7.929e8
Если так, то вот:
Код:
int readstr(FILE *f, char *str)
{
 char buf[256],*p;
 do
 {
  char *ok = fgets(buf,256,f);
  if(!ok) return 0;
  } while(buf[0]=='/' || buf[0]=='\n');
 p = strtok(buf,"//\n");
 strcpy(str,p);
 strcat(str,"\n");
 return 1;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 05.05.2009 в 16:52.
Sazary вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ссылка через определенное количество строк chaostt Microsoft Office Excel 7 03.04.2009 18:14
Количество строк delphin100 Общие вопросы Delphi 2 26.03.2009 11:58
Количество строк DBGrid AndreyF Общие вопросы Delphi 4 02.12.2008 21:32
ListBox (количество строк) Vali_T Помощь студентам 6 06.10.2008 15:30
количество строк в memo Albenous Компоненты Delphi 4 15.01.2007 19:00