Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 08.07.2018
Сообщений: 19

Разбить файл на заданное количество частей

15.08.2018, 17:50. Показов 6623. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
50
51
52
53
54
55
56
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <string>
using namespace std;
 
int main()
{
    char pat[100];
    cout << "Enter the path to the file: ";
    cin >> pat;
 
    int n, a = 0;
    int i;
 
    ofstream fout(pat);
 
    if(!fout.is_open())
    {
        cerr << "error \n";
    }
    else
    {
        cout <<"Enter the number of parts: ";
        cin >> n;
    }
    fout.close();
 
    ifstream fin;
    fin.open(pat, ios::in | ios::binary);
 
    if(!fin.is_open())
    {
        cerr << "error \n";
    }
    else
    {
        cout << "File is open" << endl;
        string str;
 
        int k = 0;
        while(getline(fin, str))
        {
            k++;
            char name[12];
            sprintf(name, "out%d.txt", k);
            ofstream f(name);
            f << str << endl;
            f.close();
        }
 
    }
 
    return 0;
}




++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++\
условие задачи
1. пользователь должен указать какой файл открыть для разбиения
2. пользователь указывает на какое количесвто частей разбить файл
3. в каждой из разбитых частей должно быть одинаковое количество строк , если не делится на равные части , то в последний записать остаток строк .
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2018, 17:50
Ответы с готовыми решениями:

Разбить файл на n частей записать в n файлов
Разбить файл на n частей записать в n файлов. Например, файл весит 300 кб его разбить на 3 части и записать в 3 файла по 100 кб. Заранее...

Разбить файл с кодом на несколько частей
Здравствуйте, пишу большой проект, на главной форме стоит tabsheet, код не разделяется по модулям, поэтому получается много когда в одном...

Разбить текстовый файл на несколько частей, построчно
Задача заключается в том, чтобы взять текстовый документ в котором содержится строки. 8-) 1.В компонент edit1 написать, кол-во частей. ...

39
0 / 0 / 0
Регистрация: 08.07.2018
Сообщений: 19
27.08.2018, 09:40  [ТС]
Студворк — интернет-сервис помощи студентам
Croessmah, можете объяснить что не так конкретно, пожалуйста?

Добавлено через 3 минуты
k0vpack, sprintf? в плане этого?
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
27.08.2018, 10:02
Maxon13, +
0
27.08.2018, 11:22

Не по теме:

Цитата Сообщение от k0vpack Посмотреть сообщение
которые пишут на С++, а используют Сшный вывод в поток, С++ же намного эффективнее
Ну, это наглая ложь.
Цитата Сообщение от k0vpack Посмотреть сообщение
проще в реализации и тем более читабельнее
А это - голый субъективизм.

0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
27.08.2018, 11:35
Цитата Сообщение от mizannny Посмотреть сообщение
Ну, это наглая ложь.

Не по теме:

эффективнее в не смысле быстрее, эффективнее в смысле меньше ошибок допускаем

0
0 / 0 / 0
Регистрация: 08.07.2018
Сообщений: 19
27.08.2018, 11:36  [ТС]
k0vpack, что делать с ошибкой?)
0
Модератор
Эксперт С++
 Аватар для zss
13800 / 10991 / 6493
Регистрация: 18.12.2011
Сообщений: 29,292
27.08.2018, 11:47
Цитата Сообщение от Maxon13 Посмотреть сообщение
sprintf(name, 12, "out%d.txt", k);
НЕ ПУТАЙТЕ sprintf и sprintf_s - это РАЗНЫЕ функции
C++
1
sprintf(name, "out%d.txt", k);
C++
1
sprintf_s(name,12, "out%d.txt", k);
Цитата Сообщение от Maxon13 Посмотреть сообщение
if (k!== n-1 && kk%KS==0)
C++
1
if (k != n-1 && kk%KS == 0)
0
0 / 0 / 0
Регистрация: 08.07.2018
Сообщений: 19
29.08.2018, 18:39  [ТС]
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <cstdio>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <string>
using namespace std;
 
int main()
{
    char pat[100];
    cout << "Enter the path to the file: ";
    cin >> pat;
 
    int n = 0;
 
    ofstream fout(pat);
 
    if(!fout.is_open())
    {
        cerr << "error \n";
    }
    else
    {
        cout <<"Enter the number of parts: ";
        cin >> n;
    }
    fout.close();
 
    ifstream fin;
    fin.open(pat, ios::in | ios::binary);
 
    if(!fin.is_open())
    {
        cerr << "error \n";
    }
    else
    {
        cout << "File is open" << endl;
 
        string str;
        int M = 0;
        while(getline(fin, str)) M++;
 
        int KS = M/n;
 
        //fin.rewind();
        //rewind(fin);
        fin.clear();
        fin.seekg(0);
        int k = 0;
        int kk = 0;
        ofstream f;
        f.open();
        while(getline(fin, str))
        {
            char name[12];
            if (k!= n-1 && kk%KS==0)
            {
                if (k > 0)
                {
                    f.close();
                }
                sprintf_s(name, 12, "out%d.txt", k);
                f.close();
                f.open(name,ios::out | ios::binary);
                k++;
                kk = 0;
            }
            f << str << endl;
            kk++;
        }
 
    }
 
    return 0;
}
54, 64 строка во вложениях описаны ошибки
Миниатюры
Разбить файл на заданное количество частей   Разбить файл на заданное количество частей  
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
29.08.2018, 18:53
Maxon13, у вас же выделена строка с ошибкой красным маркером (54). Что открываете? Имя файла не указали.

C++
1
f.open();
Добавлено через 12 минут
sprintf_s будет работать у вас только под vc++, так как он не стандартный, поэтому, как вариант, замените его на аналогичный sprintf. Посмотрите его описание - там есть отличия в аргументах.
0
Заблокирован
29.08.2018, 19:34
Цитата Сообщение от QuakerRUS Посмотреть сообщение
замените его на аналогичный sprintf
Лучше snprintf.
0
 Аватар для Shemp
18 / 17 / 9
Регистрация: 08.05.2017
Сообщений: 35
30.08.2018, 11:55
Maxon13,
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
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <fstream>
#include <vector>
 
using namespace std;
 
int main()
{
    ifstream fin;
    vector<string> lines;
    int parts;
    bool correct = true;
    
    do
    {
        string path;
    
        cout << "Enter the path to the file: ";
        cin >> path;
    
        fin.open(path);
    
        if(!fin.is_open())
        {
            cout << "Wrong path to the file." << endl;
            correct = false;
        }
        else
            correct = true;
    } while (!correct);
    
    for (string line; getline(fin, line); lines.push_back(line)){}
    
    cout << "Enter the number of parts: ";
    cin >> parts;
    
    int numStr = lines.size()/parts;
    
    for (int i = 0; i < parts; i++)
    {
        ofstream fout;
        string filename = to_string(i + 1) + " part.txt";
        
        fout.open(filename);
        
        for (int j = 0; j < numStr; j++)
        {
            fout << lines[j + numStr*i] << endl;
            if (parts - 1 == i)
            {
                int left = lines.size()%parts;
                if (j + 1 == numStr)
                {
                for (int k = 1; k <= left; k++)
                    fout << lines[j + numStr*i + k] << endl;
                }
            }
 
        fout.close();
    }
    return 0;
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.08.2018, 21:56
Цитата Сообщение от k0vpack Посмотреть сообщение
вывод в поток, С++ же намного эффективнее и проще в реализации и тем более читабельнее
Вам остается только продемонстрировать преимущества cout перед printf при выводе сложно форматированного текста.
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
30.08.2018, 22:01
Байт,
Цитата Сообщение от k0vpack Посмотреть сообщение
эффективнее в не смысле быстрее, эффективнее в смысле меньше ошибок допускаем
0
30.08.2018, 23:32

Не по теме:

Байт, да, я тоже не знал такого значения слова "эффективнее" :)

0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
31.08.2018, 08:01
Цитата Сообщение от k0vpack Посмотреть сообщение
эффективнее в смысле меньше ошибок допускаем
Особенно, если учесть приоритет операций побитового сдвига (<< , >>), которые Страуструпа осенило перегрузисть в потоковый ввод-вывод. :-)))
C++
1
2
int a=15, b=17
std::cout << (a<b) ? a : b;
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
31.08.2018, 08:35
Цитата Сообщение от gng Посмотреть сообщение
если учесть приоритет операций побитового сдвига
Если его учесть, то проблем не будет.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
31.08.2018, 09:27
k0vpack, я говорю не об эффективности, а о возможностях и удобстве. Да, простые выводы типа
C++
1
2
3
4
5
cout << a << endl;
  // удобнее чем
printf("%f\n", a);
  //  спору нет
  // И новичкам-непрофи много легче объяснить...
А вот запишите через count-потоки что-нибудь вроде
C++
1
2
3
printf("%*.*f", field,  zap, x);
  // field - величина поля
  // zap - знаков после запятой
Я не говорю, что это невозможно. С cout Это требует больше и слов, и изобретатeльности.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
31.08.2018, 10:13
C++
1
2
3
4
5
template<typename T>
void print(T const & value)
{
    std::cout << value;//ok
}
Байт, а напишите с помощью printf.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
31.08.2018, 10:19
Цитата Сообщение от Croessmah Посмотреть сообщение
Байт, а напишите с помощью printf.
Как заметил один известный персонаж - "Богу - богово, Кесарю - кесарево!"
Думаю, сами понимаете, что вопрос некорректен.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
31.08.2018, 10:27
Байт, еще как корректен. Даже в таком простом случае код с printf будет в разы сложнее, не говоря уже о более тяжелых случаях. Это я к тому, что удобство сильно зависит от ситуации, поэтому тезис
Цитата Сообщение от Байт Посмотреть сообщение
С cout Это требует больше и слов, и изобретатeльности.
не верен, потому что этот многословный изобретательный вывод будет в разы проще и короче, если этот вывод происходит в том же шаблоне, где неизвестен тип и придется воротить еще более изобретательный и многословный код для корректного формирования строки формата.
Это мы еще не берем в расчет возможность перегрузки operaotr<< для пользовательских типов.
0
31.08.2018, 16:58

Не по теме:

Один про Фому, другой про Ерему... Но суть же в том, что оба они неплохие ребяты.:D

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.08.2018, 16:58

Вычислить, на какое наибольшее количество частей могут разбить плоскость N окружностей
Окружности - 2 2 окружности разбивают плоскость максимум на 4 части. А на какое наибольшее количество частей могут разбить плоскость N...

каталог разбить на каждый файл на 5 равных частей;каждую 2-ую часть размножить и все вывести
Создать папку images в нее скопировать все изображения;каталог разбить на каждый файл на 5 равных частей;каждую 2-ую часть размножить и...

Разбить файл вещественных чисел на два: большие и меньшие, чем заданное значение
Тема: Файлы. Часть 1. Расщепление файла. Из текстового файла, содержащего вещественные числа, сформировать два других, в один из...

Разделение текстового файла на переменное количество частей и перемещение этих частей
С Вашей помощью у меня получается создать папки с плейлистами @echo off setlocal enabledelayedexpansion &gt;nul chcp 1251 set...

Отрезок -10.10 разбить на N - 1 частей
Здравствуйте. нужна помощь в Maple. нужно отрезок -10..10 разбить на N - 1 частей. Функция F вычисляется в точках разбиения. вот сам код ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
BitTorrent (версия 7.11 English) и Меню Настройки
russiannick 15.11.2026
Пункты, отвечающие за отключение обновлений в BitTorrent версии 7. 11 (английской) Options Preferences General Language
Транслитерация текста с кириллицы на латиницу (вариант №4)
Maks 15.11.2026
Что-то я перемудрил с предыдущими версиями, в этот раз сделал всё проще, обратившись к функции "СтрокаЛатиницей" из типового общего модуля "СтроковыеФункцииКлиент". В данной функции нет апострофов,. . .
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы. Карта этого меню приложена ниже. Нужный пункт выделен красным. Сервис Настройки Поведение
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru