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

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

18.08.2012, 20:11. Показов 35605. Ответов 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
5500 / 4895 / 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru