powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подсчет символов латиницы и кириллицы в richtextBox C#
8 сообщений из 8, страница 1 из 1
Подсчет символов латиницы и кириллицы в richtextBox C#
    #38005889
Kreol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
Дали задание
Программа (локальная) для подсчета текстов разного формата.
С возможностью подсчета текста в таблицах.

1. Подсчет
Делать подсчет русского текста с пробелами(пунктуация не учитывается)
Делать подсчет английского текста с пробелами(пунктуация не учитывается)
Должен выделяться текст, который не считается
Должен подсчитывать со знаками препинания которые ниже.

симвПробел ! " ‘’ ( ) запятая - . : ; ? “ ” « »код 32 33 34 39 40 41 44 45 46 58 59 63 147 148 171 187
2. Исключения
Цифры
симв0 1 2 3 4 5 6 7 8 9код 48 49 50 51 52 53 54 55 56 57

3. Символы:

симв Пробел ! “ # $ % & ‘ ( ) *код 32 33 34 35 36 37 38 39 40 41 42симв + запятая - . / : ; < = > ?код 43 44 45 46 47 58 59 60 61 62 63симв @ [ \ ] ^ _ ` { | } ~код 64 91 92 93 94 95 96 123 124 125 126симв № ё Ё код 185 168184

4. 2 и более пробелов подряд, 2 и более точек подряд.
5. английский текст в скобках и после него запятая
технологии (MST), - должен считаться как - технологии,
5.1. английский текст и после него запятая
странах-членах Schoolnet, - должен считаться как - странах-членах,
6.английский текст и после него пробел
достижении[пробел] MST[пробел] - должен считаться как - достижении[пробел]
7. [точка][запятая]
8. [т.д] [т.п.]

На скорую руку написал вот такую программу, но если честно она ужасная.
Может кто посмотреть и подправить.
Заранее благодарен.
Свою основную функцию она конечно уже выполняет, но проблемы начинаются с знаками пунктуации.
В случае когда например в тексте идет !!!привет " ромашка" привет!!! с скобками () . Когда попадает текст вперемешку русский и английский. Куски кода и тд.
Код: 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.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //выделение английского символа цветом
        private void ColorTheKs(int select)
        {
            richTextBox2.SelectionStart = select;
            richTextBox2.SelectionLength = 1;
            richTextBox2.SelectionColor = Color.Red;
            richTextBox2.SelectionBackColor = Color.Yellow;
            //richTextBox2.SelectionFont = new Font("arial", 12, FontStyle.Underline);
        }
        //выделение русского символа цветом
        private void ColorTheKs_Russ(int select)
        {
            richTextBox2.SelectionStart = select;
            richTextBox2.SelectionLength = 1;
            richTextBox2.SelectionColor = Color.White;
            richTextBox2.SelectionBackColor = Color.Green;
            //richTextBox2.SelectionFont = new Font("arial", 12, FontStyle.Underline);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string s, ss;
            ss = richTextBox2.Text;
            //Заменяем неугодные знаки
            s = ss.Replace(" :", ":").Replace(" ;", ";").Replace(" ?", "?").Replace("  ", " ").Replace(" \\ ", "\\").Replace(" ,", ",").Replace(" .", ".");
            //s = ss.Replace("\r", "").Replace("\n", "").Replace("\0", "").
            richTextBox2.Text = s;
            ss = richTextBox2.Text;
            //Переводим в код (с кодировкой Default):
            byte[] b = System.Text.Encoding.Default.GetBytes(ss);
            int small_engl_count = 0, Big_engl_count = 0, Big_russ_count = 0, small_russ_count = 0, spase_count = 0, numbers_count = 0, num_russ_count = 0, num_engl_count = 0;
            int select = 0;
            int znak = 0, znak_spec = 0, znak_spec_1 = 0;

            /* string str = ss ;
             char[] chars = str.ToCharArray();
             foreach (char ch in chars)
                 Console.WriteLine(ch);
             */
            //читаем каждый символ
            foreach (byte bt in b)
            {
                //Большие английские
                if ((bt >= 65) && (bt <= 90))
                {
                    Big_engl_count++;
                    num_engl_count++;
                }
                //Маленькие английские
                if ((bt >= 97) && (bt <= 122))
                {
                    small_engl_count++;
                    num_engl_count++;
                }
                //Большие русские 
                //168 = Ё
                if ((bt >= 192) && (bt <= 223)||(bt == 168))
                {
                    Big_russ_count++;
                    num_russ_count++;
                    ColorTheKs_Russ(select);
                }
                //Маленькие русские
                //184 = ё
                if ((bt >= 224) && (bt <= 255)||(bt == 184))
                {
                    ColorTheKs_Russ(select);
                    small_russ_count++;
                    num_russ_count++;
                }

                switch (bt)
                {
                    case 32:
                        // подсчет в русском тексте ТЕКСТ_ЗНАК_ПРОБЕЛ
                        if ((znak >= 1) && (num_russ_count >= 1))
                        {
                            small_russ_count++;
                            num_russ_count = 0;
                            spase_count++;
                            ColorTheKs_Russ(select);
                        }
                        // подсчет в английском тексте ТЕКСТ_ЗНАК_ПРОБЕЛ
                        if ((znak >= 1) && (num_engl_count >= 1))
                        {
                            small_engl_count++;
                            num_engl_count = 0;
                            spase_count++;
                            //ColorTheKs_Punk(select);
                        }
                        // подсчет в русском тексте ТЕКСТ_ПРОБЕЛ
                        if (num_russ_count >= 1)
                        {
                            small_russ_count++;
                            num_russ_count = 0;
                            spase_count++;
                            ColorTheKs_Russ(select);

                        }
                        // подсчет в английском тексте ТЕКСТ_ПРОБЕЛ
                        if (num_engl_count >= 1)
                        {
                            small_engl_count++;
                            num_engl_count = 0;
                            spase_count++;
                            //ColorTheKs_Punk(select);
                        }

                            // подсчет в любом тексте ПРОБЕЛ
                        else
                        {
                            /*if (znak_spec_1 >= 1)
                            {
                                ColorTheKs_Russ(select);
                            }*/
                            spase_count++;
                            znak_spec++;
                            //ColorTheKs_Punk(select);
                        }
                        break;
                    case 33: // !
                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 34: // "
                        if (znak_spec >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {

                            if (num_russ_count >= 1)
                            {
                                ColorTheKs_Russ(select);
                                small_russ_count++;
                            }
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 39: // ' апостроф
                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 40: // (
                        if (znak_spec >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            if (num_russ_count >= 1)
                            {
                                ColorTheKs_Russ(select);
                                small_russ_count++;
                            }
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 41: // ) 

                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 44: // ,
                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 45: // -
                        if (znak_spec >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            if (num_russ_count >= 1)
                            {
                                ColorTheKs_Russ(select);
                                small_russ_count++;
                            }
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            //znak++;
                            znak_spec_1++;
                        }
                        break;
                    case 46: // .
                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 58: // :
                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 59: // ;
                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 63: // ? 
                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 147: // “ 

                        if (znak_spec >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        //if ((richTextBox2.Text.Length - 1) == select)
                        /*{
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }*/
                        else
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        break;
                    case 148: // ”
                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    case 171: // « 

                        if (znak_spec >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        break;
                    case 187: // » 
                        if (num_russ_count >= 1)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        if ((richTextBox2.Text.Length - 1) == select)
                        {
                            ColorTheKs_Russ(select);
                            small_russ_count++;
                        }
                        else
                        {
                            znak++;
                        }
                        break;
                    default:
                        break;
                }
                if ((bt >= 48) && (bt <= 57)) numbers_count++;
                select++;
            }
            ANGL_B.Text = "АНГЛИЙСКИХ БУКВ: " + Big_engl_count;
            RUS_B.Text = "РУССКИХ БУКВ: " + Big_russ_count;
            angl_s.Text = "английских букв: " + small_engl_count;
            rus_s.Text = "русских букв: " + small_russ_count;
            SPASE.Text = "Пробелов всего: " + spase_count;
            Numb.Text = "Цыфр: " + numbers_count;
            int Sum_angl1 = Big_engl_count + small_engl_count;
            All_Angl.Text = "Всего английских букв: " + Sum_angl1;
            int Sum_russ1 = Big_russ_count + small_russ_count;
            All_Rus.Text = "Всего русских букв: " + Sum_russ1;
            Symbol.Text = "Всего символов: " + ss.Length.ToString();
            int Sum_symbol = ss.Length - Sum_russ1;
            Not_shet.Text = "Не посчитано символов: " + Sum_symbol;
        }
    }
}


сама программа
...
Рейтинг: 0 / 0
Подсчет символов латиницы и кириллицы в richtextBox C#
    #38005899
Kreol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблицу формировал относительно С#
...
Рейтинг: 0 / 0
Подсчет символов латиницы и кириллицы в richtextBox C#
    #38006061
Kreol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проект
...
Рейтинг: 0 / 0
Подсчет символов латиницы и кириллицы в richtextBox C#
    #38006161
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kreol, программа не только ужасная, но и в принципе неправильно работает с текстом.

1. Никогда. Я подчеркиваю, никогда, не работай с кодами символов. Например, вместо "case 63: // ?" надо было написать case '?'. Разумеется одновременно нужно поменять switch чтобы там был char вместо byte

2. Кодировки Default не существует. Точнее ее смысл и значение зависит от локальных настроек системы. Соответственно твоя программа может перестать работать.

3. Ты работаешь с массивом байтов исходя из того что одному символу соответствует один байт. Это в корне неверное предположение. Кодировки есть и многобайтовые. Например, в UTF-8 символ кириллицы будет занимать два байта.

4. Для проверки что из себя представляет отдельный символ используй методы структуры char такие как IsDigit, IsLetter, IsPunctuation и т.п.

5. Для проверки, того является ли символ английской или русской буквой я бы объявил два массива типа char[] где бы перечислил символы латиноского и кириллического алфавитов в обоих регистрах. Затем бы с помощью extension метода Contains() (из класса System.Linq.Enumerable) проверял бы входит ли символ в каждый массив.

6. Методы ColorTheKs(int select) и ColorTheKs_Russ(int select) делают похожие действия. Выдели общую часть в отдельную функцию.

Kreolтаблицу формировал относительно С#
Ты серьезно думаешь что в другом языке программирования коды символов другие будут? Открою секрет. Коды символов зависят от кодировки исходного файла, а не от используемого языка программирования. Прочитай статью The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) .
...
Рейтинг: 0 / 0
Подсчет символов латиницы и кириллицы в richtextBox C#
    #38006256
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Это типа искусственный интеллект программируется. В данном случае задача решаемая.
...
Рейтинг: 0 / 0
Подсчет символов латиницы и кириллицы в richtextBox C#
    #38055409
Kreol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попинали бы как )))
...
Рейтинг: 0 / 0
Подсчет символов латиницы и кириллицы в richtextBox C#
    #38055448
Kreol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно просто удалять всю латиницу и считать кирилицу?
...
Рейтинг: 0 / 0
Подсчет символов латиницы и кириллицы в richtextBox C#
    #38055527
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kreolпопинали бы как )))
я тебе выше уже дал несколько советов. Что именно тебе непонятно?

Kreolвозможно просто удалять всю латиницу и считать кирилицу?
Такой вариант прокатит с неболбшим объемом текста и если тебе не надо выделять текст, как это было в первоначальном примере.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подсчет символов латиницы и кириллицы в richtextBox C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]