Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
12 / 1 / 3
Регистрация: 26.06.2016
Сообщений: 87

Из текста удалить все символы, кроме указанных

10.08.2016, 20:06. Показов 9746. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как сделать так чтобы из текста удались все символы кроме тех, которые заранее можно указать?

поподробнее... имеется строка, закодированная Base64 + в этом же файле имеются символы переноса строки, нулевые символы и другие... на выходе должна получится строка с символами, которые используются в кодировке Base64, а все лишнее должно удалиться. Обрабатываемые файлы могут достигать размера 5 Мбайт, так что желательно чтобы все эти преобразования делались как можно шустрее.

Добавлено через 32 минуты
никто не знает? ((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.08.2016, 20:06
Ответы с готовыми решениями:

Удалить из папки все файлы, кроме указанных
Здравствуйте уважаемые форумчане! Необходимо удалить из папки все файлы, кроме указанных. Как это можно реализовать?

Удалить все символы строки кроме первого
Собственно вся суть в сабже. Есть строка с одним словом. В этом слове нужно удалить все символы, кроме первого.

Как в textbox удалить все символы кроме первого
Как в textbox удалить все символы кроме первого при этом не зная кол-во символов.

31
 Аватар для Prizrak86
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
11.08.2016, 00:49
Студворк — интернет-сервис помощи студентам
тут я за 10 минут тоже не дождался, результат такой
0
 Аватар для Prizrak86
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
11.08.2016, 00:55
Цитата Сообщение от КОП Посмотреть сообщение
вариант с билдером ведь у тебя примерно так выглядит?
я писал уже код, повторюсь, вариант №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
        static void Main(string[] args)
        {
            DateTime dtStart = DateTime.Now;
            Console.WriteLine("read");
            string strInPuth = File.ReadAllText("InPuth.txt");
            Console.WriteLine("end read "+(DateTime.Now - dtStart));
            Console.WriteLine("remove");
            string strOutPuth = Remove(new StringBuilder(strInPuth), "fzkdgxbdf");
            //string strOutPuth = Remove(strInPuth, "fzkdgxbdf");
            Console.WriteLine("end remove " + (DateTime.Now - dtStart));
            Console.WriteLine("write");
            File.WriteAllText("OutPuth.txt", strOutPuth);
            Console.WriteLine("end write " + (DateTime.Now - dtStart));
            Console.ReadLine();
        }
 
 
        static string Remove(StringBuilder inPuth, string alfavit)
        {
            for (int i = 0; i < inPuth.Length; i++)
                if (alfavit.IndexOf(inPuth[i]) != -1)
                {
                    inPuth.Remove(i, 1);
                    i--;
                }
            return inPuth.ToString();
        }
Добавлено через 23 секунды
теперь вариант №3

Добавлено через 4 минуты
код третьего варианта
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
    static class StringExtensions
    {
        public static string Remove(this string s, params char[] charsToRemove)
        {
            var buffer = new char[s.Length];
            var hash = new HashSet<char>(charsToRemove);
 
            int j = 0;
            foreach (var c in s)
                if (!hash.Contains(c)) buffer[j++] = c;
 
            return new string(buffer, 0, j);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DateTime dtStart = DateTime.Now;
            Console.WriteLine("read");
            string strInPuth = File.ReadAllText("InPuth.txt");
            Console.WriteLine("end read "+(DateTime.Now - dtStart));
            Console.WriteLine("remove");
            //string strOutPuth = Remove(new StringBuilder(strInPuth), "fzkdgxbdf");
            //string strOutPuth = Remove(strInPuth, "fzkdgxbdf");
            string strOutPuth = strInPuth.Remove('f', 'z', 'k', 'd', 'g', 'x', 'b', 'd', 'f');
            Console.WriteLine("end remove " + (DateTime.Now - dtStart));
            Console.WriteLine("write");
            File.WriteAllText("OutPuth.txt", strOutPuth);
            Console.WriteLine("end write " + (DateTime.Now - dtStart));
            Console.ReadLine();
        }
0
 Аватар для Prizrak86
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
11.08.2016, 01:05
похоже победил 3 вариант
Название: 2016-08-11_01-04-52.png
Просмотров: 46

Размер: 2.9 Кб
0
 Аватар для Prizrak86
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
11.08.2016, 01:16
я аплодирую стоя

Добавлено через 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
        static void Main(string[] args)
        {
            DateTime dtStart = DateTime.Now;
            Console.WriteLine("read");
            string strInPuth = File.ReadAllText("InPuth.txt");
            Console.WriteLine("end read "+(DateTime.Now - dtStart));
            Console.WriteLine("remove");
            //string strOutPuth = Remove(new StringBuilder(strInPuth), "fzkdgxbdf");
            string strOutPuth = Remove(strInPuth, "fzkdgxbdf");
            //string strOutPuth = strInPuth.Remove('f', 'z', 'k', 'd', 'g', 'x', 'b', 'd', 'f');
            Console.WriteLine("end remove " + (DateTime.Now - dtStart));
            Console.WriteLine("write");
            File.WriteAllText("OutPuth.txt", strOutPuth);
            Console.WriteLine("end write " + (DateTime.Now - dtStart));
            Console.ReadLine();
        }
        static string Remove(string inPuth, string alfavit)
        {
            char[] outPuth = new char[inPuth.Length];
            int i = 0;
            foreach (char item in inPuth)
                if (alfavit.Contains(item))
                    outPuth[i++] = item;
            return new string(outPuth, 0, i);
        }
Вложение 724872
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
11.08.2016, 01:39
Цитата Сообщение от Prizrak86 Посмотреть сообщение
я писал уже код, повторюсь, вариант №2 вот его код
просто в своем сообщении ты написал уже вывод про стрингбилдер, хотя в коде его не было, вот я и решил уточнить.
Цитата Сообщение от Prizrak86 Посмотреть сообщение
переписал этот вариант под свой стиль
если можно, пара корректировок
для замера времени очень удобен Stopwatch
outPuth пишется output, уж очень глаза режет

заменив HashSet на alfavit.Contains(item) получишь производительность в 5 раз хуже.
Я бы заменил массив чаров на такой синтаксис из оригинального варианта, тогда все чары можно вместе строкой передавать
C#
1
2
3
4
5
public static string Remove(this string s, string charsToRemove)
    {
        var buffer = new char[s.Length];
        var hash = new HashSet<char>(charsToRemove.ToCharArray());
        ...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
11.08.2016, 08:41
Цитата Сообщение от КОП Посмотреть сообщение
C#
1
charsToRemove.ToCharArray()
Если символов много, то можно будет сэкономить память, передавая просто строку, не перегоняя ее в массив символов.
1
 Аватар для Prizrak86
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
11.08.2016, 10:54
Цитата Сообщение от КОП Посмотреть сообщение
outPuth пишется output, уж очень глаза режет
это да, проходил немецкий язык, но стараюсь называть более или мене логично.

Добавлено через 3 минуты
если я правильно понял, то чем больше мы что-то создаем, то тем больше все тормозит. по этому я придерживался варианта статического размера данных, как это показал kolorotur.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
11.08.2016, 13:18

Не по теме:

Цитата Сообщение от Prizrak86 Посмотреть сообщение
это да, проходил немецкий язык
живу в дойчляндии, но ума не приложу, откуда тут Puth :D Но в общем согласен, очень часто слова путаются


Цитата Сообщение от Prizrak86 Посмотреть сообщение
по этому я придерживался варианта статического размера данных, как это показал kolorotur
он показывал с созданием хешсета, чем длиннее строка, тем больше будет различие с string.contains
Цитата Сообщение от Prizrak86 Посмотреть сообщение
если я правильно понял, то чем больше мы что-то создаем, то тем больше все тормозит.
гораздо быстрее отсортировать чары в хешсете и потом 100500 раз искать в упорядоченном месте, чем каждый раз перебирать всю заново строку до последнего символа.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
11.08.2016, 13:30
Цитата Сообщение от КОП Посмотреть сообщение
быстрее отсортировать чары в хешсете и потом 100500 раз искать в упорядоченном месте
Небольшая поправка: HashSet не упорядочивает элементы и имеет сложность поиска О(1) за счет хэш-функций.
1
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
11.08.2016, 18:35
Эмм, а Replace() - не модно использовать)? Или Regex?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
11.08.2016, 18:37
Цитата Сообщение от EveKS Посмотреть сообщение
а Replace() - не модно использовать)?
Ну попробуйте в контексте поставленной задачи

Цитата Сообщение от EveKS Посмотреть сообщение
Или Regex?
Можно, но регулярки для таких задач использовать — это как бульдозером песочный замок строить.
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
11.08.2016, 19:44
kolorotur, Люди умудряются строить красивые замки =))

Не по теме:


C#
1
2
3
4
5
6
7
      Regex reHref = new Regex(@"(?inx)
    <a \s [^>]*
        href \s* = \s*
            (?<q> ['""] )
                (?<url> [^""]+ )
            \k<q>
    [^>]* >");


Насчет Replace, да он тут не поможет =)

Поэксперементировал немного и написал свой Replace.
Цитата Сообщение от Futtoto Посмотреть сообщение
имеется строка, закодированная Base64 + в этом же файле имеются символы переноса строки, нулевые символы и другие... на выходе должна получится строка с символами, которые используются в кодировке Base64
Раз мы удаляем просто лишнее, и этим самым не повредим строке, то может как-то так ? :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        void Replace(string path, string pattern)
        {
            using (var reader = new StreamReader(path))
            using (var writer = new StreamWriter(@"E:\out.txt"))
            {
                int partSize = 50, currentPart = 0;                
 
                while (!reader.EndOfStream)
                {
                    char[] buffer = new char[partSize];
 
                    reader.ReadBlock(buffer, currentPart, partSize);                    
                    writer.Write(buffer.Except(pattern.ToCharArray()).ToArray());
                }
            }
        }
Создаем строку из ненужных символов, и удаляем...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.08.2016, 19:44

Удалить из текста все символы, кроме букв и пробелов
нужно удалить из текста все символы кроме букв и пробелов uses crt; var text:string; i:char; begin; clrcsr; A:=; ...

Из текста удалить все символы, не являющиеся буквами, кроме пробелов
Из текста удалить все символы, не являющиеся буквами, кроме пробелов. Текст вводится с клавиатуры.

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

Удалить все файлы, кроме указанных
Здравствуйте. Есть батник такого вида @Echo Off Set Otkuda=C:\Users\adam\Documents\pip Set NoDelete=C:\%~nx0.NoDelete ...

Удалить все символы кроме цифр
Уважаемые форумчане! Просьба подсказать как не-хардкорным способом, а красивым и элегантным можно, к примеру, с помощью функции...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru