Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.70
Valera59
1 / 1 / 0
Регистрация: 12.08.2012
Сообщений: 20
#1

Количество строк в файле - C++

18.08.2012, 20:11. Просмотров 5190. Ответов 14
Метки нет (Все метки)

Вот написал простенькую программу для подсчета строк в файл все работает но мучают сомнения почему везде где я бы не читал все делают по другому. Вот сама программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    setlocale(0,"");
    int x = 0;
    ifstream f("file.txt");
    while (true)
    {
        string v;
        getline(f,v);
        if(!f.eof())        
        x++;
        else
            break;
    }
    cout <<"Всего строк :"<<x;
    cin.get();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2012, 20:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Количество строк в файле (C++):

Количество строк в файле - C++
суть задачи такова нужно посчитать кол-во строк. мое предположение: создается цикл, ставиться счетчик. но когда должен закансиваться цикл?...

Посчитать количество строк в файле (функция) - C++
Добрый день, есть функция, принимающая поток данных: int totalRecords(std::fstream&amp; f){ unsigned int total = 0; std::string line; ...

Найти количество строк в текстовом файле - C++
я не можу написати програму для підрахування кількості стрічок в текстовому файлі. чомусь в результаті видає 3 помилки, я пишу на Turbo...

Количество строк в файле, перезапустить поток - C++
Использую вот такой код для проверки кол-ва строк в файле while (!file.eof()) { if (file.get()=='\n') amount++; } ...

Подсчитать количество строк в текстовом файле - C++
Нужно написать программу : Подсчитать количество строк в текстовом файле. Под строкой понимать совокупность символов, заканчивающихся...

Количество строк в файле. Синтаксический анализатор - C++
Подскажите пожалуйста. Я написал синтаксический анализатор. Он считывает некоторое выражение из текстового файла. Мне хотелось бы знать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zitxbit
Master C/C++
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
18.08.2012, 20:12 #2
А как вы имеете ввиду, что делают имеено по другому.
0
Blagovidov
27 / 27 / 1
Регистрация: 19.04.2012
Сообщений: 41
18.08.2012, 20:23 #3
Цитата Сообщение от Valera59 Посмотреть сообщение
Вот написал простенькую программу для подсчета строк в файл все работает но мучают сомнения почему везде где я бы не читал все делают по другому. Вот сама программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    setlocale(0,"");
    int x = 0;
    ifstream f("file.txt");
    while (true)
    {
        string v;
        getline(f,v);
        if(!f.eof())        
        x++;
        else
            break;
    }
    cout <<"Всего строк :"<<x;
    cin.get();
}
можно и так)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main() {
    ifstream in("input.txt");
    string s;
    int i = 0;
    while (in.peek() != EOF) {
        getline(in, s);
        i++;
    }
    cout << i << endl;
    in.close();
    system("pause");
    return 0;
}
0
Valera59
1 / 1 / 0
Регистрация: 12.08.2012
Сообщений: 20
18.08.2012, 21:28  [ТС] #4
Я просто видел вот так:

C++
1
2
3
4
5
TStringList *sl = new TStringList();
sl->LoadFromFile("D:\\text.txt");
ShowMessage(sl->Count);
delete sl;
sl = NULL;
но нечего не понял так как в программировании пока новичок решил попробовать сделать что-то сам. И не знаю правильно сделал или нет.

Добавлено через 1 минуту
Да и что такое in.peek() != EOF
0
4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
18.08.2012, 21:43 #5
Valera59, фактически любую задачу можно решить разными способами и чем она не тривиальнее тем больше их количество.
0
-=ЮрА=-
Заблокирован
Автор FAQ
18.08.2012, 21:46 #6
Valera59, пиши к примеру вот так
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
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
 
int main()
{
    string line;//Г’ГҐГЄГіГ№Г*Гї ñòðîêГ* ГЁГ§ ГґГ*éëГ*
    string text;//Г’ГҐГЄГ±ГІ ГґГ*éëГ*
    int nLines = 0;//ÄóìГ*Гѕ ГїГ±Г*Г® Г·ГІГ® ГЅГІГ* ïåðåìåГ*Г*Г*Гї áóäåò õðГ*Г*ГЁГІГј
    ifstream ifs("input.txt");
    if(!ifs.is_open())
        cout<<"Errro open input.txt\n";
    else
    {
        while(getline(ifs,line))
        {
            text += line + "\n";
            nLines++;
        }
        ifs.close();
        cout<<"Text in file : \n"<<text<<endl;
        cout<<"Num of lines : "<<nLines<<endl;
    }
    return 0;
}
input.txt
hgfdjh63g1k2l;3/..03.
sf3
1f
.f1m3jh61

gjh
vn
gj
mhjgf1,k4l56uk4l,n.
dfhg
v.
bm2n3m1,2jh4j1,h
3n

Не по теме:

И не заморачивайся на классы

Цитата Сообщение от Valera59 Посмотреть сообщение
TStringList *sl = new TStringList();

0
Миниатюры
Количество строк в файле  
Пaтрик
415 / 390 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
18.08.2012, 21:55 #7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
size_t lines_count(const char *Filename)
{
    FILE *file = fopen(Filename, "r");
    size_t count = 1;
    while (!feof(file))
        if (fgetc(file) == '\n')
            count++;
    fclose(file);
    return count;
}
 
int main(void)
{
    printf("%d\n", lines_count("E:\\1.txt"));
    return 0;
}
0
nameless
Эксперт C++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
18.08.2012, 22:28 #8
Valera59,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
 
int main() {
    std::ifstream input_file("input.txt");
    std::cout <<
        std::distance(
            std::istream_iterator <std::string>(input_file),
            std::istream_iterator <std::string>()
        ) 
    << std::endl;
}
1
-=ЮрА=-
18.08.2012, 22:48
  #9

Не по теме:

nameless, обращу твоё внимание на то что приведенный тобой код не учитывает пустые строки
http://liveworkspace.org/code/888c81...54a3f496136b36

0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.08.2012, 22:53 #10
Цитата Сообщение от Valera59 Посмотреть сообщение
Да и что такое in.peek() != EOF
Один из способов проверки на конец файла. Функция peek() возвращает следующий символ из потока ввода (символ остаётся в потоке) или признак конца файла EOF.
0
-=ЮрА=-
Заблокирован
Автор FAQ
18.08.2012, 23:10 #11
Возможный вариант чтения в стиле Си
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
45
46
47
48
49
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main()
{
    FILE * file = NULL;
    char * line = NULL;//ÓêГ*Г§Г*òåëü Г*Г* ГІГҐГЄГіГ№ГіГѕ ñòðîêó ГЁГ§ ГґГ*éëГ*
    char * text = NULL;//ÓêГ*Г§Г*òåëü Г*Г* ГІГҐГЄГ±ГІ ГґГ*éëГ*
    long fLen  = 0;
    int nLines = 1;//ÄóìГ*Гѕ ГїГ±Г*Г® Г·ГІГ® ГЅГІГ* ïåðåìåГ*Г*Г*Гї áóäåò õðГ*Г*ГЁГІГј
    file = fopen("input.txt","rb");
    if(!file)
        printf("Error open input.txt\n");
    else
    {
        fseek(file,0,SEEK_END);//Êóðñîð ГўГЄГ®Г*ГҐГ¶
        fLen = ftell(file);//ÓçГ*Г*ВёГ¬ äëèГ*Г*Гі ГґГ*éëГ*
        fseek(file,0,SEEK_SET);//Êóðñîð ГўГ*Г*Г·Г*ëî
        if(!fLen)
            printf("File has zero length\n");
        else
        {
            //³äåëÿåì ГЇГ*ìÿòü ïîä ГІГҐГЄГ±ГІ Гў ГґГ*éëå
            text = (char *)malloc((1 + fLen)*sizeof(char));
            if(!text)
                printf("Allocation memory error\n");
            else
            if(!fread(text,1,fLen,file))//ÏûòГ*åìñÿ Г±Г·ГЁГІГ*ГІГј ГґГ*éë
                printf("Read file error\n");//Åñëè Г*ГЁГ·ГҐГЈГ® Г*ГҐ Г±Г·ГЁГІГ*ëè - èçâåùГ*ГҐГ¬
            else
            {
                text[fLen] = '\0';//Åñëè Г±Г·ГЁГІГ*ëè, îòñåèâГ*ГҐГ¬ ìóñîð
                line = strchr(text,'\n');//Èùåì ГЄГ®Г*öû ñòðîê - òîáèøü \n
                while(line)
                {
                    nLines = nLines + 1;
                    line = strchr(line + 1,'\n');
                }
                printf("Text in file : \n%s\n",text);
                printf("Num of lines : %d\n",nLines);
            }
            if(text)
                free((void *)text);
        }
        fclose(file);
    }
    return 0;
}
0
Миниатюры
Количество строк в файле  
-=ЮрА=-
18.08.2012, 23:16
  #12

Не по теме:

PS:Valera59, предположу, что мои слова о некорректности алгоритма адресованные nameless прошли для него мимо его ушей, просто предлагаю оттестировать его код на 12 строках вот этого текста

Код поста 8-мь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
 
int main() 
{
    ifstream input_file("input.txt");
    cout <<distance
        (
            istream_iterator <string>(input_file),
            istream_iterator <string>()
        ) 
    << endl;
    return 0;
}

Nameless

your

cose

not

parse

empty

strings!
- алгоритм выдаёт 7-мь вместо 12-ти (как я и говорил - пустые строки не считаются)это обстоятельство может служить причиной серьёзного бага при подсчёте строк...

0
nameless
Эксперт C++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
19.08.2012, 00:18 #13
-=ЮрА=-, вот учитывает пустые строки, только успокойтесь, пожалуйста.

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 <iostream>
#include <string>
#include <algorithm>
#include <fstream>
 
#include <boost/tokenizer.hpp>
 
int main() {
    std::ifstream input_file("input.txt");
    boost::char_separator <char> separator("\n", "", boost::keep_empty_tokens);
    boost::tokenizer <
        boost::char_separator <char>,
        std::istreambuf_iterator<char>
    > tokens(
        std::istreambuf_iterator<char>(input_file),
        std::istreambuf_iterator<char>(),
        separator
    );
    std::cout <<
        std::distance(
            tokens.begin(),
            tokens.end()
        ) - 1
            << std::endl;
}
Код
hgfdjh63g1k2l;3/..03.
sf3
1f
.f1m3jh61

gjh
vn
gj
  
mhjgf1,k4l56uk4l,n.
dfhg
v.

bm2n3m1,2jh4j1,h 

bm2n3m1asdasd
asdasd
3n
Bash
1
2
3
nameless@l49-53-61:~/cpp/number_file_lines$ g++ -std=c++11 main.cpp -o main
nameless@l49-53-61:~/cpp/number_file_lines$ ./main
18
0
-=ЮрА=-
19.08.2012, 00:26
  #14

Не по теме:

Цитата Сообщение от nameless Посмотреть сообщение
только успокойтесь, пожалуйста.
- а кто сказал что я нервничал?Я всего лишь показал дыру в алгоритме

0
xcode
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 49
07.11.2016, 19:56 #15
скажите, де тут в этих кодах реализуется "подсчет количества заданных строк в выбранном файле, каждая строка ищется отдельным дополнительным потоком, основной поток отображает количество уже найденных строк в процессе поиска и позволяет просматривать файл" ?

спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2016, 19:56
Привет! Вот еще темы с ответами:

Считать количество строк в файле и записать в масив - C++
есть класс Book #ifndef BOOK_H_ #define BOOK_H_ #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; class Book { ...

подскажите как подсчитать количество строк в файле - C++
Подскажите пожалуйста код программы как подсчитать кол-во строк в файле

Определить количество символов, слов и строк в файле - C++
Здравствуйте ребята, на практических столкнулась с проблемой, необходима ваша помощь) Есть некий текстовый файл, мне нужно определить...

Файл: В текстовом файле подсчитать количество непустых строк. - C++
В текстовом файле подсчитать количество непустых строк.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.11.2016, 19:56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru