Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для hackmer
0 / 0 / 1
Регистрация: 26.03.2009
Сообщений: 15

Ненужные символы из файла. regex?

04.07.2010, 23:50. Показов 1800. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Имею файл, с примерно таким содержимым, как во вложении(отличие только в том, что в оригинале под 100строк).
Нужно привести к виду:
M LD 003317 ECU05 100702 12514 5934 EC EC
M LD 003317 ADU05 100702 08357 1724 AD AD
M LD 003317 EDM54 100702 96100 28 ED ED
M LD 003317 J1U07 100702 11397 1836 J1 JY
M LD 003317 SPU02 100702 10261 30 SP SP
Пробовал что-то вроде:
regex'ом пытаюсь убрать ненужные символы, только вот "паттерн" не знаю как подобрать
C#
1
string object = Regex.Replace(st, @" M  LD      |         |0000|0000000000000000000000000000| ..                      ", @" ");
Но это не лучший вариант получается
Помогите, пожалуйста, кто сталкивался, и кто знает как это реализовать.
Вообще, делается это всё, для дальнейшего заполнения БД этой инфой. Почему-то думается, что приведя к такому виду облегчу задачу с БД.
Может есть вариант занести данные из файла в БД не проделывая вышеуказанную запеканку с удалением символов ДО заполнения? Если это можно сделать при вводе инфы в БД, то как?
Заранее спасибо
Вложения
Тип файла: txt test.txt (810 байт, 21 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2010, 23:50
Ответы с готовыми решениями:

Ненужные символы в строке
мне в новую строку temp надо кинуть строку, перевёрнутую строке str: for (i=strlen(str)-1; i!=-1; i--) temp=str; при первом разе...

Убрать ненужные символы
Мне нужно убрать все ненужные символы из текста и оставить только рус. англ. буквы и цифры, делю так ...

Удалить ненужные символы
Удалить в строке ненужные символы (12abc,.). Полученную строку перевернуть. Формат ввода: s - строка Формат вывода: t -...

9
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
05.07.2010, 00:42
C#
1
string regexPattern=@"\s*(\w)\s+(\w{2})\s*(\d{6})\s+(\w{5})\s+(\d{6})\s+(\d{5})0{4}(\d{4})0{28}\w*\s+(\w{2})\s+(\w{2})\s*\r?";
http://gskinner.com/RegExr/ - очень удобный инструмент для написания и отладки regex.
1
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
05.07.2010, 00:46
C#
1
2
3
4
5
            // если в строке есть неугодные символы
            string s = "aa   b      cc    d     ee     f";
            // то можно расщепить ее в массив строк пропустив их все
            string[] ss = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            // при этом ss[0] = "aa", ss[1] == "b", ss[2] == "cc" и так далее
вот так по каждой строке файла можно сделать, а потом уже по индексам в бд заносить

"все так делают"=)
0
 Аватар для hackmer
0 / 0 / 1
Регистрация: 26.03.2009
Сообщений: 15
05.07.2010, 01:03  [ТС]
Цитата Сообщение от Mikant Посмотреть сообщение
C#
1
2
3
4
5
            // если в строке есть неугодные символы
            string s = "aa   b      cc    d     ee     f";
            // то можно расщепить ее в массив строк пропустив их все
            string[] ss = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            // при этом ss[0] = "aa", ss[1] == "b", ss[2] == "cc" и так далее
вот так по каждой строке файла можно сделать, а потом уже по индексам в бд заносить

"все так делают"=)
В том-то и дело, что неугодных символов нет, т.е. есть, допустим, 0, но он не является неугодным, просто 0 присутствует там где он мне не нужен.
Вот, например:
M LD 003317 ECU05 100702 1248600000032000000000000000000000000000 0l EC EC
нужно привести к:
M LD 003317 ECU05 100702 12486 32 EC EC
0 можно назвать "неугодным" символом, но он мне нужен в 003317, ECU05, 100702, в общем, практически в любом "столбце" может присутствовать.
Промелькнуло в голове, может можно как-то сделать что-то вроде:
A BC 123456 ABC12 123456 12345 67 AB CD
но количество символов в столбцах может быть разным
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
05.07.2010, 01:24
то же, что я написал, но потом, к примеру, можно для каждого ss[5] сделать
C#
1
ss[5] = ss[5].Remove("0");
просто напросто все надо делать последовательно - так проще и надежнее

Не по теме:

я думаю, слово Remove знакомо

0
 Аватар для s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
05.07.2010, 08:33
Цитата Сообщение от Mikant Посмотреть сообщение
то же, что я написал, но потом, к примеру, можно для каждого ss[5] сделать
Код C#1 ss[5] = ss[5].Remove("0");
просто напросто все надо делать последовательно - так проще и надежнее
Так вы можете исключить некоторые нужные 0
Например:

Исходные:
M LD 003317 SPU02 100702 10261000000300000000000000000000000000000yz SP SP
Результат:
M LD 003317 SPU02 100702 10261 30 SP SP

hackmer, необходимо хорошо разобраться с форматом текстового файла, Что и сколько каждая строка включает, как, допустим, в приведенном примере можно понять что ищется именно 30, а не 3000 или 3, а за тем о решении можно будет думать

Добавлено через 16 минут
Цитата Сообщение от Mikant Посмотреть сообщение
то же, что я написал, но потом, к примеру, можно для каждого ss[5] сделать
C#
1
ss[5] = ss[5].Remove("0");
просто напросто все надо делать последовательно - так проще и надежнее

Не по теме:

я думаю, слово Remove знакомо


И еще (пропустил....), метод Remove удаляет заданное количество символов....
вы наверно имели ввиду
C#
1
ss[5] = ss[5].Replace("0","");
0
 Аватар для hackmer
0 / 0 / 1
Регистрация: 26.03.2009
Сообщений: 15
05.07.2010, 17:45  [ТС]
По сути, это данные о цене. На скрине по цветам:
красрый-ID данного "выпуска"
синий - название инструмента(разделено тонкой линией: EC-сам инструмент, U05-торгуемое время, т.е. тоже нужно разделить)
зеленый-дата(02.07.2010 но менять не нужно)
желтый-цена инструмента
фиолетовый-объем на текущей цене
черный-ID инструмента, на основе которого и идет отбор
Надеюсь сумел показать что как
Миниатюры
Ненужные символы из файла. regex?  
0
 Аватар для hackmer
0 / 0 / 1
Регистрация: 26.03.2009
Сообщений: 15
05.07.2010, 21:30  [ТС]
Удалось привести:
M LD 003317 ECU05 100702 1248600000032000000000000000000000000000 0l EC EC
M LD 003317 ECU05 100702 1248700000106000000000000000000000000000 0l EC EC
M LD 003317 ECU05 100702 1248800000174000000000000000000000000000 0kl EC EC
M LD 003317 ECU05 100702 1248900000516000000000000000000000000000 0kl EC EC
M LD 003317 ECU05 100702 1249000000952000000000000000000000000000 0ijkl EC EC
к такому виду:
124860032
124870106
124880174
124890516
124900952
может и примитивным способом, но я не гуру-кодер:
C#
1
2
3
4
5
6
7
8
9
10
11
12
                if (s.Contains("EC"))
                {
                    string[] result1 = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    string filine = "";
                    for (int i = 0; i <= result1.Length - 1; i++)
                    {
                        filine = filine + result1[i];
                    }                      
                    string line = filine.Remove(0, 20).Remove(5, 4).Remove(9,31);                    
                    string regObj = Regex.Replace(line, @"\D", "");
                    CMErtbox.AppendText("\n" + regObj);
                }
Теперь стоит задача разделить первые пять символов от оставшихся четырех пробелом
0
 Аватар для s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
06.07.2010, 05:39
Цитата Сообщение от hackmer Посмотреть сообщение
По сути, это данные о цене. На скрине по цветам:
красрый-ID данного "выпуска"
синий - название инструмента(разделено тонкой линией: EC-сам инструмент, U05-торгуемое время, т.е. тоже нужно разделить)
зеленый-дата(02.07.2010 но менять не нужно)
желтый-цена инструмента
фиолетовый-объем на текущей цене
черный-ID инструмента, на основе которого и идет отбор
Надеюсь сумел показать что как

Группы не стал именовать, если надо - сами

\s*(\w+)\s+(\w+)\s+(\d{6})\s+([\w\d]{2})([\w\d]{3})\s+(\d{6})\s+(\d{5})(?:0{4})(\d{4})( ?:[\w\d]*)\s+([\w\d]+)\s+([\w\d]+)


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static void Main(string[] args)
        {
 
            string s = @"05         100702  12514000059340000000000000000000000000000aghimnqrstvwTVWXYZ                                 EC EC                      
 M  LD      003317 ADU05         100702  08357000017240000000000000000000000000000yzFGMNP                                            AD AD                      
 M  LD      003317 EDM54         100702  96100000000280000000000000000000000000000xyzADH                                             ED ED                      
 M  LD      003317 J1U07         100702  11397000018360000000000000000000000000000nstzBCMNPZ                                         J1 JY                      
 M  LD      003317 SPU02         100702  10261000000300000000000000000000000000000yz                                                 SP SP ";
 
            string p = @"\s*(\w+)\s+(\w+)\s+(\d{6})\s+([\w\d]{2})([\w\d]{3})\s+(\d{6})\s+(\d{5})(?:0{4})(\d{4})(?:[\w\d]*)\s+([\w\d]+)\s+([\w\d]+)";
            Match m = Regex.Match(s, p);
            while (m.Success)
            {
                for (int i = 1; i < m.Groups.Count ; i++)
                    Console.Write("Groups[{0}]=\"{1}\"\n",i,m.Groups[i]);
                Console.WriteLine();
                m = m.NextMatch();
            }
            Console.ReadKey();
        }
Это просто как пример
Попробуйте

Добавлено через 1 час 41 минуту
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static void Main(string[] args)
        {
 
            string s = @"05         100702  12514000059340000000000000000000000000000aghimnqrstvwTVWXYZ                                 EC EC                      
 M  LD      003317 ADU05         100702  08357000017240000000000000000000000000000yzFGMNP                                            AD AD                      
 M  LD      003317 EDM54         100702  96100000000280000000000000000000000000000xyzADH                                             ED ED                      
 M  LD      003317 J1U07         100702  11397000018360000000000000000000000000000nstzBCMNPZ                                         J1 JY                      
 M  LD      003317 SPU02         100702  10261000000300000000000000000000000000000yz                                                 SP SP ";
 
            string p = @"(\w+)\s+(\w+)\s+(\d+)\s+([\w\d]{2})([\w\d]{3})\s+(\d+)\s+(\d{5})(?:0{4})(\d{4})(?:[\w\d]*)\s+([\w\d]+)\s+([\w\d]+)";
            Match m = Regex.Match(s, p);
            while (m.Success)
            {
                string s1 = String.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9}",
                                    m.Groups[1], m.Groups[2], m.Groups[3], m.Groups[4], m.Groups[5],
                                    m.Groups[6], m.Groups[7], Convert.ToInt32(m.Groups[8].ToString()), 
                                    m.Groups[9], m.Groups[10]);
 
                Console.WriteLine(s1);
                m = m.NextMatch();
            }
            Console.ReadKey();
        }
Немного изменил рег.в.
1
 Аватар для hackmer
0 / 0 / 1
Регистрация: 26.03.2009
Сообщений: 15
12.07.2010, 23:33  [ТС]
2 s-kvv
Спасибо. На вашем примере regex.match научился работать с регулярными выражениями. А то в книгах всё пишут и пишут, примеров мало. Респект.
2 nicolas2008
Спасибо за сайт. Скачал оттуда программу.
Тему можно закрывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2010, 23:33
Помогаю со студенческими работами здесь

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

Не вырезаются ненужные символы
Должно вырезать все указанные символы $_ILLEGAL_SYMBOLS_IN_QUERY = array('&quot;',&quot;'&quot;,'^','«','»',',','!','?','→'); А в итоге...

Удалить в строке ненужные символы
Удалить в строке ненужные символы (12abc,.). Полученную строку перевернуть. Формат ввода: s - строка Формат вывода: t -...

На консоль выводятся ненужные символы
Помогите плз найти,что не так,хочу вывести строку b,в которую скопировал символы из s до 2 пробела. Выводит половину слова из s и дальше...

Вырезать из переменной ненужные символы
Привет! есть такой пхп код &lt;?php echo $num; ?&gt; он выводит содержимое переменной $num на странице но в этой переменной есть...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru