С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/165: Рейтинг темы: голосов - 165, средняя оценка - 4.93
 Аватар для Valera59
1 / 1 / 0
Регистрация: 12.08.2012
Сообщений: 20

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

18.08.2012, 20:11. Показов 35564. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.08.2012, 20:11
Ответы с готовыми решениями:

Узнать из текста в файле количество строк и наибольшее количество слов в строке
Помогите пожалуйста, подсчет строк я вроде сделал, а вот строку с наибольшим количеством слов не могу string s; int strok = 0; ...

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

Не считывает количество строк в файле
Проблема в заголовке. Вместо положенного числа строк, прога выдаёт всего 1. #include &quot;stdafx.h&quot; #include...

14
 Аватар для zitxbit
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
18.08.2012, 20:12
А как вы имеете ввиду, что делают имеено по другому.
0
 Аватар для Blagovidov
27 / 27 / 3
Регистрация: 19.04.2012
Сообщений: 41
18.08.2012, 20:23
Цитата Сообщение от 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  [ТС]
Я просто видел вот так:

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
21 / 21 / 1
Регистрация: 06.07.2012
Сообщений: 88
18.08.2012, 21:43
Valera59, фактически любую задачу можно решить разными способами и чем она не тривиальнее тем больше их количество.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2012, 21:46
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трик
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
18.08.2012, 21:55
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
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
18.08.2012, 22:28
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

Не по теме:

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

0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.08.2012, 22:53
Цитата Сообщение от Valera59 Посмотреть сообщение
Да и что такое in.peek() != EOF
Один из способов проверки на конец файла. Функция peek() возвращает следующий символ из потока ввода (символ остаётся в потоке) или признак конца файла EOF.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2012, 23:10
Возможный вариант чтения в стиле Си
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

Не по теме:

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
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
19.08.2012, 00:18
-=ЮрА=-, вот учитывает пустые строки, только успокойтесь, пожалуйста.

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;
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

Не по теме:

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

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

спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2016, 19:56
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru