Как посчитать количество символов в тексте?
Пробовал 2 варианта, через размер файла(fseek), и через цикл while(fgetc(file) != EOF. С файлом с английскими словами возвращает все правильно. С русскими же в 2 раза больше. Можно ли как нибудь сделать, чтобы независимо от языка он возвращал верное кол во символов?
Отслеживать
задан 31 мая 2020 в 7:56
Ярослав Захаров Ярослав Захаров
81 1 1 серебряный знак 9 9 бронзовых знаков
А текст в какой кодировке?
31 мая 2020 в 8:01
Я так понял русские символы это UNICODE? Создаю обычный *.txt. Посмотрел сколько весит один английский символ — 1 байт. Русский символ же весит — 2 байта в моей программе
31 мая 2020 в 8:15
Все ответ ниже с wchar помог. Странно что один компилятор не хотел считать символы, а другой посчитал их
31 мая 2020 в 9:42
Ваш текстовый файл может быть в UTF-8 (скорее всего) или в ANSI-1251 или в UTF-16 или в ещё какой экзотической кодировке. И в зависимости от того, какая используется кодировка в файле, один символ будет занимать то или иное количество байт. Причём, в зависимости от символа и кодировки, число байт занимаемых этим символом может отличаться от числа байт, занимаемых другим символом в этой же кодировки (кодировка с переменным числом байт на символ). Соответственно, и считать символы можно только зная кодировку текста.
31 мая 2020 в 10:01
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Читайте UTF-8 символы с помощью fgetwc . Работает только с указанной локалью.
NAME fgetwc, getwc - read a wide character from a FILE stream SYNOPSIS #include #include wint_t fgetwc(FILE *stream); wint_t getwc(FILE *stream); DESCRIPTION The fgetwc() function is the wide-character equivalent of the fgetc(3) function. It reads a wide character from stream and returns it. If the end of stream is reached, or if ferror(stream) becomes true, it returns WEOF. If a wide-character conversion error occurs, it sets errno to EILSEQ and returns WEOF.
#include #include #include #include int main() < setlocale(LC_ALL,""); FILE * const f = fopen("test","r"); do< errno=0; wint_t const wc = fgetwc(f); if (wc == WEOF) < if(errno) printf("error\n"); else printf("eof\n"); break;>printf("wc=%d\n",wc); > while (1); fclose(f); >
1 символ в Microsoft Word!
Знаете сколько весит (кб) вордовский или екселевский файл с одной буквой или символом?
Стало интересно узнать сколько же? Вот результаты:
* Microsoft Word — 11,5 кб. или 11 818 байт;
* Microsoft Excel — 8,02 кб. или 8 221 байт;
* Microsoft PowerPoint — 32,5 кб. или 33 523 байт;
* Блокнот — 1 байт
С блокнотом и поинтом понятно. Файл екселя легче чем вордовский — не понятно почему.
Ведь в екселе больше функций
Вы как думаете?
Проверено было на Windows 10
4 года назад
Когда коту делать нехуй, он яйца лижет
раскрыть ветку
4 года назад
Функции-то в программе, а не в документе.
А в документе помимо самого текста что может быть? Форматирование.
А вот форматирования в вроде больше, чем в экселе.
4 года назад
переименуй docx и xlsx в zip, разархивируй, и узнаешь
4 года назад
Уважаемый /-ая/, /-ые/ гр.
Я получил и прочел ваше интересное письмо. Сообщаемые вами факты хорошо известны науке и интереса для нее не представляют. Тем не менее я горячо благодарю вас за ваше наблюдение и желаю вам успехов в работе и в личной жизни.
4 года назад
1 хуй 1 байт экселя весь кластер займет. 4кб если не ошибаюсь дефолтные. Поэтому у блокнота 4Кб. Эксель в 2 раза больше. Ворд в 3.
Похожие посты
1 месяц назад
«Уродливые» свитеры Майкрософт
Так называемые «уродливые» свитеры (Ugly Sweater) разных лет, которые Майкрософт выпускает под рождество. Они отсылают к классическим атрибутам Windows — Пэйнту, Сапёру, Скрепке и холмам
Показать полностью 6
2 года назад
Ответ FancySunny в «Microsoft купит Activision Blizzard: World of Warcraft, Diablo II, Overwatch, Starcraft, Warcraft III и другие игры уже в кармане»
2 года назад
Продолжение поста «Microsoft купит Activision Blizzard: World of Warcraft, Diablo II, Overwatch, Starcraft, Warcraft III и другие игры уже в кармане»
Говорят скоро в игре World of Warcraft появится новый питомец:
4 года назад
Стили в Microsoft Word
В Microsoft Word есть очень мощный и полезный инструмент, который называется «Стили». Когда я только начинал плотно работать в word’е — казалось, что стили — это очень сложно и непонятно, поэтому старался их не использовать. Но разобравшись, я понял, что там всё очень просто и хочу вам сейчас это показать.
Для чего вообще нужны стили?
Часто при работе есть необходимость сделать отдельное форматирование для заголовков разного уровня (разные отступы от края, разный размер шрифта, разное начертание), для названий таблиц и фигур (например, убрать интервал после абзаца, чтоб название и тело таблицы были как-бы склеенные), просто если вы хотите выделить некоторые места в тексте другим шрифтом, отступом, кеглем.
Давайте для начала зададим стили для трех уровней заголовков, для этого просто разметим их, как нам будет удобно
Когда вас устраивает, как выглядят заголовки, можно приступать к созданию стилей, а тут всё очень просто)
Ставим курсор в любое место в тексте первого заголовка (должна мигать вертикальная палочка), далее делаем последовательность действий:
1. переходим в расширенный список стилей
2. нажимаем «Создать стиль»
3. задаем имя (желательно сначала ставить цифру, затем текст — так заметней и удобней при работе)
в работе для удобства и скорости я обычно стили заголовков называю «1», «1.1», «1.1.1» — так быстрее и наглядней)
Теперь самое интересное — как нужный текст сделать заголовком из созданных стилей? Просто поставить курсор в нужное место и выбрать из галереи стилей нужный вам ранее созданный стиль.
Вот так вот все просто)
Еще один существенный бонус использования стилей для заголовков — потом очень просто собрать оглавление. Для этого ставим курсор в место, куда хотим вставить оглавление, переходим во вкладку «Ссылки», нажимаем «Оглавление», затем выбираем пункт «Настраиваемое оглавление»
Во всплывающем окне сразу переходим в параметры, там вписываем уровни заголовков цифрами (1,2,3), нажимаем 2 раза «ок»
Уточнение: цифры со стилей стандартных заголовков можно не убирать — мы их не используем и они нам никак мешать не будут
Получится такое вот стандартное оглавление
Еще один бонус от использования стилей заключается в том, что вы в любой момент можете внести в него изменение, если что-то вас перестало устраивать и обновить сам стиль — в этом случае изменения внесутся во все заголовки (или просто текст), которые используют конкретно этот стиль. Чтобы это сделать, просто внесите нужные вам изменения, а затем в галерее стилей выберите активный, нажмите правую кнопку мыши и выберите пункт «обновить «название_стиля» в соответствии с выделенным фрагментом»
Спасибо за внимание!
Надеюсь, кому-нибудь пригодится)
Показать полностью 5 3
4 года назад
Word, excel — добавление часто используемых функций в панель быстрого доступа
В офисном пакете от Microsoft есть крайне полезная фишка — можно добавить функции, которые вы чаще всего используете в работе в специальную панель быстрого доступа, которая всегда на виду. Она хороша тем, что не нужно каждый раз выискивать нужную функцию в разных вкладках. Стоит один раз настроить эту панель и вы редко будете заходить дальше вкладки «Главная».
Выглядит это вот так:
Чтобы это сделать, наведите курсор на нужную вам функцию и нажмите правую кнопку мыши. Во всплывающем окне выберите первую команду.
Также, в эту панель можно добавлять и макросы. Для этого нужно перейти в параметры Word (Excel, PowerPoint) и выбрать там пункт «Панель быстрого доступа», либо нажать крайнюю правую кнопку на панели и там выбрать пункт «Другие команды» :
Появится окно параметров. Тут нужно будет сделать последовательность действий:
1. выбрать из всплывающего списка пункт «Макросы»
2. выбрать макрос, который вы хотите добавить на панель быстрого доступа
3. нажать «Добавить»
Может быть, кому-то будет полезно)
Показать полностью 2
4 года назад
Наша победа! Сообществу быть!
Уважаемые подписчики, спешу вас обрадовать @SupportCommunity разрешил создать сообщество посвящённое Office. Спасибо вам за поддержку))
Сообщество будет посвящено MS Office, Libreoffice и Google docs.
Я хочу чтобы сообщество приносило пользу многим, дабы облегчить работу офисному брату))
Тех кто владеет Libreoffice и Google docs призываю вас быть активней, сообществу понадобятся модераторы, чтобы следить за порядком и публиковать полезные посты.
4 года назад
Лига Microsoft Office
Уважаемая администрация сайта и подписчики, я хочу создать Лигу Microsoft Office, в которой будут размещаться посты про Word, Excel, Access, Power Point, Outlook, Publisher и др., где пользователи смогут узнать что-то новое или поделиться своим опытом.
В настоящее время на сайте имеется много постов про Word и Excel, но они не систематизированы, однако тема интересна и заслуживает отдельного внимания. В этом сообществе я планирую публиковать обучающие посты про Excel. Кто-то также может выкладывать полезные статьи, которые пригодятся пользователям Пикабу.
Тем кому будет не интересна данная тематика смогут поставить сообщество в игнор.
Ссылки на мои посты:
Остальные опубликованы в сообществе «Лайфхак»
Ссылка на сообщество MS, Libreoffice & Google docs
Показать полностью
6 лет назад
5 лет в Microsoft, вот награда
7 лет назад
Небольшой макрос для ворда
Пока проходил производственную практику возникла необходимость отредактировать около 300 документов в одной папке. Это были доп. соглашения к ТД, но не суть.
В общем, чтобы не париться, я, путем поиска в гугл, создал небольшую форму с макросом для замены текста во всех файлах word (.docx) в определенной папке.
Выглядит это так:
*ниже приложу ссылку для скачивания*
Путь до папки копируется прямо из проводника:
С пунктами «что заменить» и «на что заменить» я думаю все понятно.
Чекбокс «с задержкой» предназначен для слабых ПК, дабы постоянное открытие и закрытие документов не загружало память. Текстбокс рядом с чекбоксом предназначен для указания задержки в секундах, 3 секунд на самых слабых ПК более, чем достаточно.
Вот как выглядит сам код:
Private Sub CommandButton1_Click()
Dim s As String, fldr As String
fldr = TextBox1.Value & «\»
s = Dir(fldr & «*.doc»)
Do While s <> «»
With Documents.Open(fldr & s)
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = TextBox2.Value
.Replacement.Text = TextBox3.Value
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
If CheckBox1.Value = True Then Call idle(TextBox4)
ActiveDocument.Save
.Close
End With
s = Dir
Loop
MsgBox («Замена завершена!»)
End Sub
И код таймера задержки:
Public Sub idle(n As Single)
Dim t As Single
t = Timer + n
DoEvents
Do While Timer < t
Loop
End Sub
Как я уже говорил, части кода взяты с просторов интернета и совмещены в один документ. Вы можете встретить что-то подобное в интернете.
Сделал наглядный пример. Создал несколько документов в папке с текстом:
Документ с макросом вы можете скачать по ссылке: https://yadi.sk/d/58JkrdIXtCTtx
*Работает на версиях MS Office 2010 и 2013. Также необходимо разрешить запуск макросов в настройках безопасности:
Надеюсь, что этот небольшой макрос поможет кому-то сэкономить время и силы при работе с документами 🙂
Скорость передачи данных модемом равна 256 ООО бит/с, Текстовый файл передавался 12 мин. Определите количество символов в переданном сообщении, если использовалась кодировка Unicode
Общий объем файла равен скорости передачи умноженной на потраченное на передачу время:
256000 бит/с * 720 с = 184320000 бит
В различных Unicode кодировках вес одного символа варьируется от 1 байта (8 бит) до 4 байт (32 бит).
Если 1 символ весит 1 байт (8 бит), то в текстовом файле 23040000 символов.
Если 1 символ весит 2 байт (16 бит), то в текстовом файле 11520000 символов.
Если 1 символ весит 3 байт (24 бит), то в текстовом файле 7680000 символов.
Если 1 символ весит 4 байт (32 бит), то в текстовом файле 5760000 символов.
2 из 13
где i – информационный вес одного символа ( в битах ).
Информационный объем текста определяется по формуле V = К·i , где
К — количество символов в тексте,
i – информационный вес одного символа
3 из 13
Статья, набранная на компьютере, содержит 32 страницы, на каждой странице 40 строк, в каждой строке 48 символов. Определите размер статьи в кодировке КОИ-8, в которой каждый символ кодируется 8 битами.
- 120 Кбайт 2) 480 байт
3) 960 байт 4) 60 Кбайт
Пояснение: Найдем количество символов в статье:
K = 32 · 40 · 48 = 2 5 · 5 · 2 3 · 3 · 2 4 = 15 · 2 12 .
Один символ кодируется одним байтом, 2 10 байт составляют 1 КБ, поэтому информационный объем статьи составляет
V = 15 · 2 12 · 1 байт / 2 10 = 15 · 2 2 Кб = 60 Кб.
4 из 13
Информационное сообщение объемом 450 бит состоит из 150 символов. Каков информационный вес каждого символа этого сообщения?
1) 5 бит; 2) 30 бит; 3) 3 бита; 4) 3 байта .
Информационное сообщение объемом 3 Кбайта содержит 6144 символа. Сколько символов содержит алфавит, при помощи которого было записано это сообщение?
1) 4; 2) 16; 3) 8; 4) 32.
Пояснение: из формулы V = К·i находим i= V / K
i = 450 бит/ 150 = 3 Ответ: 3
Пояснение: из формулы V = К·i находим i= V / K бит
i = 3 · 2 10 · 2 3 бит/ 6144 = 3 · 2 13 / (6 · 2 10 ) = 4 бита
N=2 i N = 2 4 = 16 символов Ответ: 2
5 из 13
Учитывая, что каждый символ кодируется 16-ю битами, оцените информационный объем следующей пушкинской фразы в кодировке Unicode:
Привычка свыше нам дана: Замена счастию она.
1) 44 бита; 2) 704 бита; 3) 44 байта; 4) 794 байта.
Пояснение: С читаем все символы выделенной фразы, включая пробел и знаки препинания – 44
V = 44 * 16 бит = 704 бит Ответ: 2
6 из 13
Пользователь создал сообщение из 256 символов в кодировке Unicode, в которой каждый символ кодируется 16 битами. После редактирования информационный объём сообщения составил 3072 бит. Определите, сколько символов удалили из сообщения, если его кодировка не изменилась.
1) 100 2) 64 3) 32 4) 16
Пояснение: Вычисляем количество символов отредактированного сообщения K= V / i
К = 3072 / 16 =3 * 2 10 / 2 4 = 3 * 64 = 192 символа.
Определяем сколько удалили 256 – 192 = 64
7 из 13
Информационный объём одного сообщения составляет 0,25 Кбайт, а другого – 512 бит. Во сколько раз информационный объём второго сообщения меньше объёма первого?
Текстовый документ, состоящий из 3072 символов, хранился в 8-битной кодировке КОИ-8. Этот документ был преобразован в 16-битную кодировку Unicode. Укажите, какое дополнительное количество Кбайт потребуется для хранения документа. В ответе запишите только число.
1) 3; 2) 32; 3) 16; 4) 8.
Пояснение: приводим единицы в соответствие, например в байты 0,25*2 10 512 /8 = 64 = 2 6 . Вычисляем 0,25 * 2 10 / 2 6 = 4 Ответ: 4
Вычисляем инф.объем V=3072 * 8 / 8 / 1024 = 3 Кб исходного текста. Вычисляем инф.объем преобразованного текста V2 = 3072 * 16 / 8 / 1024 = 6 КБ. Вычисляем разницу 6 – 3 = 3 КБ Ответ: 1
8 из 13
Умение оценивать качественные параметры текста
Даны два фрагмента текста из произведения А. П. Чехова «Белолобый». В обоих фрагментах используется шрифт одного и того же семейства (гарнитуры).
9 из 13
Какие из перечисленных ниже свойств символов и абзацев различаются для левого и правого фрагментов текста? В ответе перечислите номера различающихся свойств в порядке возрастания, например 134.
1) Начертание шрифта (прямое, курсивное, полужирное)
2) Выравнивание строк (левое, правое, по центру, по ширине)
3) Отступ первой строки
4) Размер шрифта
Сравниваем два фрагмента: