Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2016, 14:38   #1
Goodbadman
Новичок
Джуниор
 
Регистрация: 15.09.2016
Сообщений: 1
По умолчанию Кодирование в base64 построчно

Задача такая :
1)брать файл с множеством строк в котором в каждой строке по одному словосочетанию/ предложению
2)кодировать каждую строку отдельно от других строк
3)записывать кодировку в другой файл в строку
4)Кодировать следующую строку текста
5)записывать кодировку в другую строку того же файла с кодированым результатом и т.д.
В 2-х словах построчная кодировка

Все варианты, которые я нашел в интернете кодируют все целиком . Получается сплошной код . А мне нужен построчный кодация каждого словосочетания/ предложения без соединения его с остальным текстом
Помогите пожалуйста!
Goodbadman вне форума Ответить с цитированием
Старый 15.09.2016, 15:08   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А чем оно отличается? В делфи, например, файл кодируется одной функцией из юнита EncdDecd, а строка другой из того же юнита.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.09.2016, 17:03   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

набросал наипростейшую программулинку.
посмотрите, может быть, это то, что Вы безуспешно ищите?

Base64EncodeTextFile_EXE.rar

пароль на архив: 1234
внутри EXEшник, собран на Delphi.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.09.2016, 22:09   #4
Максай
Пользователь
 
Аватар для Максай
 
Регистрация: 21.07.2008
Сообщений: 40
По умолчанию

Goodbadman, Вам следовало бы сказать, хотя бы на каком языке Вам нужна программа.
Вот так, например, это можно написать на C++/Boost:
Код:
#include <cstdlib>
#include <iostream>
#include <string>
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/transform_width.hpp>
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>

//
// ---------------------------------------------------------------------------
int main( int argc, char* argv[] )
{
    // Выводим информацию по использованию программы и завершаем выполнение,
    // если при запуске программы не были указаны входной и выходной файлы.
    if( argc != 3 )
    {
        const boost::filesystem::path program_path( argv[0] );
        std::cerr
            << "Usage: " << program_path.filename().string() << " INPUT_FILE OUTPUT_FILE" << std::endl
            << "Base64 encode INPUT_FILE line-by-line and write encoded lines to OUTPUT_FILE." << std::endl;

        return EXIT_FAILURE;
    }

    // Открываем входной и выходной файл.
    boost::filesystem::ifstream input_file;
    boost::filesystem::ofstream output_file;
    try
    {
        const boost::filesystem::path input_file_name = argv[1];
        const boost::filesystem::path output_file_name = argv[2];

        input_file.open( input_file_name );
        if( ! input_file.is_open() )
        {
            throw std::runtime_error( std::string("Can't open file for reading: \"") + input_file_name.string() + '"' );
        }

        output_file.open( output_file_name );
        if( ! output_file.is_open() )
        {
            throw std::runtime_error( std::string("Can't open file for writing: \"") + output_file_name.string() + '"' );
        }
    }
    catch( const std::exception& e )
    {
        std::cerr << e.what() << std::endl;
        return EXIT_FAILURE;
    }

    // Считываем входной файл построчно.
    std::string current_line;
    while( std::getline( input_file, current_line ) )
    {
        // Кодируем каждую строчку в base64, используя boost dataflow iterators, как описано тут:
        // http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/dataflow.html
        typedef boost::archive::iterators::base64_from_binary< boost::archive::iterators::transform_width<std::string::const_iterator, 6, 8> > it_base64_t;
        std::string encoded_line( it_base64_t( current_line.begin() ),
                                  it_base64_t( current_line.end() ) );
        // Дописываем к закодированной строчке 1 или 2 знака =, при необходимости, как описано тут:
        // https://ru.wikipedia.org/wiki/Base64#MIME
        encoded_line.append( (3 - current_line.length() % 3) % 3, '=' );
        // Записываем закодированную строчку в выходной файл.
        output_file << encoded_line << std::endl;
    }

    // Работа программы успешно завершена.
    input_file.close();
    output_file.close();
    return EXIT_SUCCESS;
}

Последний раз редактировалось Максай; 15.09.2016 в 22:13.
Максай вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
base64 MorgunZ Общие вопросы Delphi 13 15.03.2015 00:02
base64 кодирование и декодирование Azz100 Microsoft Office Excel 3 10.05.2013 21:07
Base64 GoldmasteR Общие вопросы Delphi 10 06.01.2011 18:37
base64 Dimarik Win Api 0 10.04.2010 18:59
base64 BlackOmen Общие вопросы Delphi 2 02.05.2008 16:30