412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,500
1

Добавление в текст верхней строки при добавлении многострочного текста, функцией. fprintf( . лишние коды 13

27.12.2021, 13:32. Показов 1014. Ответов 8

Author24 — интернет-сервис помощи студентам
[CPP]/* Беру

Добавлено через 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
/* Беру с буфера windows кусочек текста и добавляю к текстовому файлу
если текст в несколько строк, то фунция fprintf(, добавляет лишние символы код 13
 приходиться удалять через костыли */
 
//чтение текста из буфера обмена
    while (1){
        if (IsClipboardFormatAvailable(CF_TEXT))
        if (OpenClipboard(NULL))//открываем буфер обмена
                {
            HANDLE hData = GetClipboardData(CF_TEXT);//извлекаем текст из буфера обмена
            char* chBuffer = (char*)GlobalLock(hData);//блокируем память
            GlobalUnlock(hData);//разблокируем память
            CloseClipboard();//закрываем буфер обмена
            //------------------------------------------------
        if (memcmp(old, chBuffer, strlen(old)) != 0 && strlen(chBuffer) < lenght)
              {// Если содежимое буфера изменилось 
                 SYSTEMTIME st;
                GetLocalTime(&st);
std::string day_and_time = std::to_string(st.wDay) + "." + std::to_string(st.wMonth) +
                       "." + std::to_string(st.wYear) + " -- " + std::to_string(st.wHour) +
                              "." + std::to_string(st.wMinute);// <== c11 есть to_wstring(  
sprintf(tmp, "%s%s", "---------------------------------- ", day_and_time.c_str());
 
FILE *  file_app = _wfopen(buf, L"a+");
  fprintf(file_app, "%s\n", tmp);
   fprintf(file_app,"%s\n", chBuffer);
       fclose(file_app);
Добавлено через 2 минуты
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
/* Перенос последней порции текста на верх текстового файла*/
 
 
FILE *fin; size_t f_size(0);// Сишное узнавание размера файла( --- переносимое ---)
if ((fin = _wfopen(buf, L"rb")) != 0){
    int prev = ftell(fin);
    fseek(fin, 0L, SEEK_END);
    f_size = ftell(fin);// В  fine_cout размер файла
    fseek(fin, prev, SEEK_SET); //go back to where we were
                    //}
char *arr = (char*)malloc(f_size + 1);
    
fread(arr, sizeof(char), f_size, fin);// сишное предст.
    
                    fclose(fin);// сишное предст.
                        //fin.close();// прочитал в массив, Файл больше не нужен, можно закрыть.        
            // =============================== Записать из массива обратно в тот же файл с сортировкой
                short count_code(0);// Посчитаем коды(strlen их не учитывает)
                for (int i = 0; i < strlen(chBuffer); ++i)if ((int)chBuffer[i] == 10){ ++count_code; }
                   //-------------------------------
FILE *dst; 
    if ((dst = _wfopen(buf, L"wb")) != 0){
                
        for (int i = (f_size - strlen(chBuffer) - strlen(tmp) - count_code
            - 2); i < f_size; ++i) //dst << arr[i];// С конца массива последний буфер.
                {
        if ((int)arr[i] == 13 && (int)arr[i+1] == 13);// Точка с запятой выполн. (пропускать один из двух код 13)
                        else fwrite(arr + i, sizeof(char), sizeof(char), dst);// сишное предст.
                }
        //-------------------------------           
        for (int i = 0; i < f_size - strlen(chBuffer) - strlen(tmp)
                        - 4 - count_code; ++i) //dst << arr[i];// С начала массива что было в файле раньше.
        fwrite(arr+i, sizeof(char), sizeof(char), dst);// сишное предст.
                    
                    fclose(dst);// сишное предст.
                              //dst.close();// Закрываем файл
                    free(arr);// сишное предст.
                }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2021, 13:32
Ответы с готовыми решениями:

fprintf(file_app,"%s\n", chBuffer); при добавлении многострочного текста, лишние коды 13
/* Беру

Добавление одного процента в ProgressBar при добавлении 1 строки в listBox
Всем здравствуйте. Такой вот вопрос как привязать ко всему этому прогресс бар : foreach (string...

Лишние строки в файле при сохранении текста из memo
При сохранении текста из memo в файл, в файле потом после каждой строки идёт пустая строка. Как...

Запись многострочного текста из строки ввода в .txt файл
Всем привет, задачка: - есть многострочный текст, который вводится пользователем (строка...

Удалить лишние поля при добавлении материала
Народ, подскажите. Мне нужно, что бы когда пользователи добавляли материал, не было лишних полей....

8
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,053
Записей в блоге: 2
05.05.2022, 15:11 2
Лучший ответ Сообщение было отмечено Наталья8 как решение

Решение

Наталья8,
насчитал 3 неотвеченных ваших вопросов.

но сначала пару слов про это
Цитата Сообщение от Наталья8 Посмотреть сообщение
А вообще можно легко кодировать на смеси си и с++
да,
я знаком с книжкой:
Название: 41391701.jpg
Просмотров: 61

Размер: 17.0 Кб
так как я тоже пробовал так пейсать программы(в геймдеве),
то имею полное право заявить, что смешивать С и С++ код в одном файле исходника
без особой нужды это гавностиль.

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

И так, если вас интересует, как правильно работать в С++ со строками, то это раз.
Если вам интересует как избавиться от 13 в fprintf это два.

Обратите внимание, что fprintf это из Си,
а вы находитесь в разделе С++.

Поверьте, крестовикам глубоко безразлично дло мук и страданий сишников,
если это на С++ делается легко и быстро. И не потому, что нельзя так на Си, а потому что они тут Крестовики.))

Итак.
Раз.
по умолчанию библиотека конвертирует '\n' в "\r\n" для текстовых потоков на платформах,
где это необходимо (например, Windows).
Таким образом, вам не нужен явный возврат каретки в строке. Это обрабатывается автоматически.
Если вы хотите явно указать возврат каретки, вам нужно открыть файл в двоичном режиме.
При чтении текстового потока происходит обратное преобразование: "\r\n" преобразуется в '\n'
Два.
Используйте С++, даже нативная IDE Arduino использует компилятор с поддержкой С++,
хотя бывает, что и рамы всего лишь пару килобайт ))


Все строки можно складывать в контейнер:
C++
1
std::list<std::string> cargo;
добавить строку: std::string str;
в конец контейнера(он же текст): cargo.push_back(str);
в начало контейнера(он же текст): cargo.push_front(str);

удалить строку: std::string str;
из конца контейнера(он же текст): cargo.pop_back(str);
из начала контейнера(он же текст): cargo.pop_front(str);

ещё кучу всяких разных операций можно посмотреть в справке:
https://en.cppreference.com/w/cpp/container/list

если чем то не угодил std::list, то вы его можете легко заменить другим стандартным контейнером из std библиотеки.

скинуть cargo в файл:
C++
1
2
3
4
{
    std::ofstream file("my.txt");
    for(const auto& s : cargo) file << s << '\n';
}
ну, и т.д. и т.п..

Ваще, задавать вопрос по мелкому недоразумению,
при этом притягивая в первопост всю свою мега-прогу не есть тру.

И тру это писать программки, в котором локализована ваша проблема или проблемка,
без лишней пурги.

Удивительная штука(вы сами удивитесь) тогда происходит,
что если так начать делать,
то ответы на вопросы будут находиться в автоматическом режиме.
3
412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,500
05.05.2022, 21:26  [ТС] 3
Да я там уже что то навинтил сам.
Прочитал... Осознал...
0
412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,500
05.05.2022, 21:35  [ТС] 4
https://www.cyberforum.ru/atta... 1651775739
Вложения
Тип файла: mp4 clip(3).mp4 (739.2 Кб, 6 просмотров)
0
412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,500
05.05.2022, 21:52  [ТС] 5
Век живи, дураком помрёшь.

Добавлено через 8 минут
добавить строку:
C++
1
 std::string str;
в конец контейнера(он же текст):
C++
1
cargo.push_back(str);
в начало контейнера(он же текст):
C++
1
cargo.push_front(str);
Тогда и писать нечего. даже не интересно.

Добавлено через 5 минут
Я в тексте hex редактором ковырялся.
0
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,053
Записей в блоге: 2
05.05.2022, 22:11 6
Цитата Сообщение от Наталья8 Посмотреть сообщение
Тогда и писать нечего. даже не интересно.
хм,

уже написано триллионы строчек кода,
этот код в массе своей тавтологичен клонами, а в уникальности есть как рак, лебедь и щука.

задача современного кодера, не закодить следующий велосипед,
а интегрировать существующие решения
под конкретную востребованную задачу.

и знания конкретного языка это тока заполнитель на стыках больших уже готовых блоков.

...
0
412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,500
05.05.2022, 22:16  [ТС] 7
Вы поэт...
1
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,053
Записей в блоге: 2
05.05.2022, 22:22 8
Наталья8,
мда, так оно и есть:
интегратор кода это круче, чем просто программист -
он как ситх сожравший дюжину кодеров-джедаев.
1
412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,500
06.05.2022, 00:07  [ТС] 9
Вот попал... Под интегратора.
0
06.05.2022, 00:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2022, 00:07
Помогаю со студенческими работами здесь

При добавлении значений в таблицу появляются лишние столбцы
Здравствуйте, при добавлении значений в таблицу появляются откуда-то лишние столбцы Вот php...

Почему при добавлении таблицы начинают приписываться какие то лишние цифры?
Есть запрос SELECT SUM(crm_doplat.summ) as REV,...

Образуются лишние пробелы при добавлении записей в MSSQL из MS Access 2013
Hi, All! Рад всех видеть на этом форуме! Проблема в следующем. Есть база MSSQL Express 2013,...

При пользовании функцией Replace появляются лишние кавычки
Может подскажет кто? Все кавычки дублирует( ''что-то'' ) и в начале ив конце ставит. Что за...

При добавлении текста в Word часть добавляемого текста сделать жирным
Здравствуйте. Добавляю текст в Word операторами (переменные CalcValue, Str: String формируются...

Выделение текста при постоянном добавлении текста в RichTextBox
Делаю программу которая получает данные по Serial порту и выводит их в RichTextBox. Проблема у меня...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru