Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/23: Рейтинг темы: голосов - 23, средняя оценка - 5.00
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
1

Как осуществить чтение файла и подсчет строк?

30.08.2009, 23:05. Показов 4411. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
видимо на форуме уже обсуждалась такая тема,но я все такие не смог найти то что мне надо,так что заранее извиняюсь за то что поворяю все...есть код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
  {
 
FILE *f;
f=fopen("c://test.txt","w");//название текста и режим .w-write
 
 
int a=strlen(f);
cout<<"\n"<<a<<"\n";
 
fclose(f);
      system("PAUSE");
 
  return 0;
  }
наверно все ясно уже....надо вывести сколько символов находится в строке...но при компиляции кричит на
Warning 1 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\projects\proba\proba\proba.cpp 21 proba
Error 2 error C2664: 'strlen' : cannot convert parameter 1 from 'FILE *' to 'const char *' d:\projects\proba\proba\proba.cpp 24 proba
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2009, 23:05
Ответы с готовыми решениями:

Скажите, как можно осуществить подсчет строк в Excel?
Прилагаю файлы для разъяснения того, что мне надо.

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

Как осуществить чтение текстового файла
Добрый день, я абсолютный лол в программировании, поэтому столкнулся с проблемой. Не могу...

Бинарное дерево поиска. Как осуществить запись в файл и чтение из файла
Добрый день! Если кому не жаль своего времени окажите помощь! Необходимо осуществить запись в...

22
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 23:12 2
Про fopen компилятор просто варнинг выдал, типа правильнее юзать fopen_s. А насчет strlen почитай внимательно как она используется
Код
НАЗВАНИЕ
       strlen - вычисление длины строки

СИНТАКСИС
       #include <string.h>

       size_t strlen(const char *s);

ОПИСАНИЕ
       Функция  strlen()  вычисляет  длину  строки s, не считая завершающий
       символ ‘\0’.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       Функция strlen() возвращает количество символов в строке s
1
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
30.08.2009, 23:16  [ТС] 3
Gravity, спасибо...но я не понял как в моем коде юзать...
0
22 / 3 / 0
Регистрация: 21.06.2009
Сообщений: 38
30.08.2009, 23:19 4
Смотри мою тему ...

Про функции и файлы

там есть функция chtenie если в конце нее написать cout << i << ehdl;
то как раз выведет кол-во строк в файле только буфер надо сделать наверное побольше
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 23:20 5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void)
{
    FILE *fp;
    int c, nlines = 0;
    
    if( (fp = fopen("test", "r")) == NULL)
        return 1;
    while( (c = getc(fp)) != EOF)
        if(c == '\n')
            nlines++;
    printf("lines = %d\n", nlines);
    fclose(fp);
    return 0;
}
0
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
30.08.2009, 23:23  [ТС] 6
Neo-n06, не то...

Добавлено через 2 минуты
Gravity, ТЬФУ!Я снова попултал!!!!!!я хотел написать не строки а символы!
а за код большое спасибо!...пригодится.....
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 23:27 7
Цитата Сообщение от МедведЪ Посмотреть сообщение
я хотел написать не строки а символы!
Ну инкрементируй счетчик в цикле while без сравнения символов, еще проще.
0
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
30.08.2009, 23:30  [ТС] 8
Gravity, то есть так?
C++
1
2
3
4
5
6
7
8
9
10
11
FILE *f;
f=fopen("c://test.txt","w");//название текста и режим .w-write
 
 
 
int a=0;
while(f!=EOF){
    a++;}
 
cout<<"\n"<<a<<"\n";
fclose(f);
снова что то не то....вроде правильно ?
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 23:33 9
Цитата Сообщение от МедведЪ Посмотреть сообщение
снова что то не то....вроде правильно ?
Блин... FILE *f - это структура, к ней нельзя применить сравнение типа "while(f!=EOF)", для чтения из файлового указателя есть функции вроде getc выше.
1
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
30.08.2009, 23:38  [ТС] 10
Gravity, хаха спасибо)))не знал
вроде работает ошибок нет...
теперь смотри что такое...зашел на этот файл написал афаыпфыпыавп,запусл прогу пишет 0,проверяю этот файл,а там пусто...хотя сам там написал и сохронил...что не так?
вот код
C++
1
2
3
4
5
6
7
8
9
10
11
FILE *f;
f=fopen("c://test.txt","w");//название текста и режим .w-write
 
 
 
int a=0;
while(getc(f)!=EOF){
    a++;}
 
cout<<"\n"<<a<<"\n";
fclose(f);
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
30.08.2009, 23:40 11
А зачем открывать файл для записи "w", если ты собираешься из него читать?
1
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
30.08.2009, 23:46  [ТС] 12
Gravity, я в этом не разбираюсь,код взял с форума...не я написал.

Добавлено через 3 минуты
Gravity, все ))))я решил вместо w написал r))спасибо большое за поддержку)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
30.08.2009, 23:50 13
МедведЪ Если файл открывается с параметром "w" он либо создаётся заново, либо (если уже существует) обрезается до нулевой длинны, так, что можно уже ничего и не считать
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
#include <stdio.h>
 
/* определение длинны файла */
 
int main(int argc, char **argv){
    FILE *fp;
    long int fsize;
 
    if ( argc != 2 ){
        printf("Usage: %s <some_file>\n", argv[0]);
        return(1);
    }
    
    if ( (fp = fopen(argv[1], "rb")) == NULL ){
        printf("%s: Can't open file %s\n", argv[0], argv[1]);
        return(1);
    }
    
    fseek(fp, 0, SEEK_END);
    fsize = ftell(fp);
    fclose(fp);
    printf("Size of file %s is %d bytes\n", argv[1], fsize);
    
    return(0);
}
1
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
31.08.2009, 00:02  [ТС] 14

Не по теме:

Gravity, :friends:



Добавлено через 8 минут

Не по теме:

Gravity, :friends:


Цитата Сообщение от Gravity Посмотреть сообщение
#include <stdio.h>
int main(void)
{
FILE *fp;
int c, nlines = 0;
if( (fp = fopen("test", "r")) == NULL)
return 1;
while( (c = getc(fp)) != EOF)
if(c == '\n')
nlines++;
printf("lines = %d\n", nlines);
fclose(fp);
return 0;
}
решил дописать прогу,чтобы еще строки считала
вот мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FILE *f;
f=fopen("c://test.txt","r");
 
int c=0;
int l=0;
int a=0;
while(getc(f)!=EOF){
    a++;
 
}
 
 while( (c = getc(f)) != EOF)
        if(c == '\n')
            l++;
 
 
 
cout<<"\n"<<l<<"\n";
cout<<"\n"<<a<<"\n";
пишет что 0 строк
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
31.08.2009, 00:05 15
МедведЪ, перед тем как считать строки, делай rewind(f), чтобы сместить указатель на начало файла.
1
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
31.08.2009, 00:09  [ТС] 16
Gravity, гигантское спасибо!))))))
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
31.08.2009, 00:14 17
Чтобы подавить дурацкий warning нужно определить где-нибудь этот _CRT_SECURE_NO_WARNINGS.
Microsoft всех нагло заставляет использовать все эти fopen_s() функции.
Они не стандартны насколько я знаю и существуют только в Visual Studio 2005 и выше.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
31.08.2009, 00:19 18
А зачем два цикла делать? Оно же так в 2 раза дольше считать будет...
Кстати, если считаете символы и строки, точно \n за символ должно считаться?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
long int symbols, rows;
int c;
FILE *fp;
 
/* открыть файл, ругнуться, если неудачно */
 
symbols = 0L;
rows = 0L;
while ( (c = getc(fp)) != EOF ) {
    if ( c == '\n' )
        rows++;
    else
        symbols++
}
Ну или, если и \n за новый символ считать:
C
1
2
3
4
5
while ( (c = getc(fp)) != EOF ) {
    symbols++;
    if ( c == '\n' )
        rows++;
}
0
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
31.08.2009, 01:17 19
МедведЪ,
Цитата Сообщение от МедведЪ Посмотреть сообщение
пишет что 0 строк
а сколько у тебя в файле "c://test.txt" должно было их быть?
Цитата Сообщение от МедведЪ Посмотреть сообщение
f=fopen("c://test.txt","r");
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
31.08.2009, 01:27 20
Цитата Сообщение от easybudda Посмотреть сообщение
C
1
2
3
4
5
6
7
...
while ( (c = getc(fp)) != EOF ) {
    if ( c == '\n' )
        rows++;
    else
        symbols++
}
C
1
2
    else
        symbols++;
Точку с запятой пропустил.
1
31.08.2009, 01:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2009, 01:27
Помогаю со студенческими работами здесь

Как осуществить построчное считывание строк из txt файла
Доброго дня. Как осуществить в windows form построчное считывание строк из txt файла? Опишу...

Не получается осуществить чтение из файла
Здравствуйте. У меня не получаеться осуществить чтение из файла, то есть код компилируется, но...

Осуществить чтение из типизированного файла в StringGrid
как осуществить чтение из типизированного файла в стринг грид (через динамический список), что бы...

Не удается осуществить запись и чтение файла
вот код для записи файла: JButton ButtonZapis = new...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru