Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 1
Регистрация: 20.10.2011
Сообщений: 28

Реально ли вывести в консоль определенный кусок кода?

30.12.2014, 13:55. Показов 2773. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Нужно вывести в консоль некоторый кусок исходного кода из класса, например обозначенный некоторым #region.
Вариант просто вручную писать WriteLine-ы не подходит т.к. #region может разрастаться.
Реально ли вообще это сделать?

Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.12.2014, 13:55
Ответы с готовыми решениями:

Как сделать на js что бы в зависимости от переменной выводился определенный кусок кода
Добрый день, например мы имеем 3 значения из которых выбирается одно , которое потом получаем ...

Вывести определенный кусок текста!
с сайта вывел html код, залогиневшегося пользователя на сайте. Надо найти часть текста 'Баланс', и вывести от туда только числа допустим...

Взять определенный кусок текста из HTML
Приветствую снова. Мне нужно взять кусок из текста, и вставить к примеру в TextBox1 Нужно, взять отсюда то, что идет после...

20
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
30.12.2014, 14:10
Можно, немножко не так как вы думаете.
Можно дизассемблить программу и вывести то что вас интересует.
Но этот код не будет на 100% таким же как и исходный.

2. На этапе построения используя before-compilation событие сгенерировать класс с константой в которой будет указанный вами участок кода.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.12.2014, 16:25
Mickmaggot, а еще можно написать цикл.
0
0 / 0 / 1
Регистрация: 20.10.2011
Сообщений: 28
30.12.2014, 16:39  [ТС]
2. Но как передать в константу кусок кода, кроме как не выделив его вручную?
Квайн для C# в вики выглядит так:
C#
1
2
3
4
5
using System;
class A{static void Main(){string s=@"using System;
class A{{static void Main(){{string s=@{0}{1}{0};
Console.Write(s,'{0}',s);}}}}";
Console.Write(s,'"',s);}}
Но и здесь не то, если, например, добавить еще using в начало, то придется дописывать и string для вывода. Реально ли сделать это автоматически, чтобы не приходилось вручную таскать код в выдачу (переписывать константу, как в вашем 2))?
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
30.12.2014, 16:51
Лучший ответ Сообщение было отмечено Mickmaggot как решение

Решение

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
using System;
using System.Collections.Generic;
 
using System.IO;
 
 
class LineReader
{
    public static IEnumerable<string> ReadLines(string filename)
    {
        using (TextReader reader = File.OpenText(filename))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                yield return line;
            }
        }
    }
 
    static void Main()
    {
        foreach (string line in ReadLines("../../LineReader.cs"))
        {
            Console.WriteLine(line);
        }
    }
}
Миниатюры
Реально ли вывести в консоль определенный кусок кода?  
1
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
30.12.2014, 17:37
Лучший ответ Сообщение было отмечено Mickmaggot как решение

Решение

Program.cs
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
using System;
using System.Collections.Generic;
using System.IO;
 
class Program
{
    #region test
 
    private class LineReader
    {
        public static IEnumerable<string> ReadLines(string filename)
        {
            using (TextReader reader = File.OpenText(filename))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    yield return line;
                }
            }
        }
    }
 
    #endregion
    private static void Main()
    {
        TextScanner textScanner = new TextScanner(File.ReadAllText("../../Program.cs"));
        textScanner.Skip("#region test");
        Console.WriteLine(textScanner.ReadTo("#endregion"));
    }
}
TextScanner.cs
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
using System;
 
    /// <summary>
    /// Класс для извлечения нужной информации из разнородного текста
    /// </summary>
    public class TextScanner
    {
        //--- members ---------------------------------------------------------
        string mText;
        int mPosition;
        int mStartRead;
 
 
        //--- public ----------------------------------------------------------
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="text">Текст для обработки</param>
        public TextScanner(string text)
        {
            mText = text;
            mPosition = 0;
            mStartRead = -1;
        }
        public void refresh()
        {
            mPosition = 0;
        }
        /// <summary>
        /// Перемещение указателя в конец текста
        /// </summary>
        public void GoToEnd()
        {
            mPosition = mText.Length;
        }
 
        /// <summary>
        /// Перемещение указателя на начало искомого текста
        /// </summary>
        /// <param name="text">Искомый текст</param>
        public void GoTo(string text)
        {
            if (!TryGoTo(text))
                throw new Exception("Неверный формат текста");
        }
 
        /// <summary>
        /// Попытка перемещения указателя на начало искомого текста
        /// </summary>
        /// <param name="text">Искомый текст</param>
        /// <returns>true в случае удачи</returns>
        public bool TryGoTo(string text)
        {
            int p = mText.IndexOf(text, mPosition);
 
            if (p == -1)
                return false;
 
            mPosition = p;
            return true;
        }
 
        /// <summary>
        /// Перемещение указателя за искомый текст
        /// </summary>
        /// <param name="text">Искомый текст</param>
        public void Skip(string text)
        {
            if (!TrySkip(text))
                throw new Exception("Неверный формат текста");
        }
 
        /// <summary>
        /// Попытка перемещения указателя за искомый текст
        /// </summary>
        /// <param name="text">Искомый текст</param>
        /// <returns>true в случае удачи</returns>
        public bool TrySkip(string text)
        {
            int p = mText.IndexOf(text, mPosition);
 
            if (p == -1)
                return false;
 
            mPosition = p + text.Length;
            return true;
        }
 
        /// <summary>
        /// Начать чтение с текущего места
        /// </summary>
        public void BeginRead()
        {
            if (mPosition == mText.Length)
                throw new Exception("Указатель в конце текста");
 
            mStartRead = mPosition;
        }
 
        /// <summary>
        /// Завершить чтение
        /// </summary>
        /// <returns>Прочитанный текст</returns>
        public string EndRead()
        {
            if (mStartRead == -1)
                throw new Exception("Необходимо предварительно начать чтение");
 
            string r = mText.Substring(mStartRead, mPosition - mStartRead);
            mStartRead = -1;
            return r;
        }
 
        /// <summary>
        /// Прочитать текст с текущей позиции до указанного текста
        /// </summary>
        /// <param name="text">Стоп-текст</param>
        /// <returns>Прочитанный текст</returns>
        public string ReadTo(string text)
        {
            BeginRead();
            GoTo(text);
            return EndRead();
        }
    }
Миниатюры
Реально ли вывести в консоль определенный кусок кода?  
1
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
30.12.2014, 17:48
Проще наверно регулярными выражениями ну не как не найду в себе силы выучить все спецсимволы
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.12.2014, 18:26
Лучший ответ Сообщение было отмечено Mickmaggot как решение

Решение

_exp10der_, да там же одна точка хД. Но быстрее просто строками
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.IO;
 
namespace ConsoleApplication14
{
    #region foo
    class Program
    {
        static void Main()
        {
            string file = File.ReadAllText("../../Program.cs");
            const string regionName = "#region foo", endregion = "#endregion";
            int start = file.IndexOf(regionName);
            int end = file.LastIndexOf(endregion);
            string program = file.Substring(start + regionName.Length, end - start - regionName.Length);
            Console.WriteLine(program);
            Console.WriteLine(program.Length);
        }
    }
    #endregion
}
1
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
03.01.2015, 04:40
C#
1
2
3
4
5
6
7
8
9
10
11
12
    #region foo
    class Program
    {
        static void Main()
        {
            Regex regex = new Regex(@"#region(\w|\W|.)*\#endregion");
            string file = File.ReadAllText("../../Program.cs");
            Console.WriteLine(regex.Match(file));
            Console.ReadKey();
        }
    }
    #endregion
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.01.2015, 12:12
Prog_maker,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    #region foo
    class Program
    {
        static void Main()
        {
            #region regex
            Regex regex = new Regex(@"#region(\w|\W|.)*\#endregion");
            #endregion
            string file = File.ReadAllText("../../Program.cs");
            Console.WriteLine(regex.Match(file));
            Console.ReadKey();
        }
    }
    #endregion
Добавлено через 26 секунд
Prog_maker, я уж молчу про эту запись: (\w|\W|.)
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
03.01.2015, 17:38
Psilon, А что в ней не так? Может достаточно - (\w|\W)*
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.01.2015, 20:19
Prog_maker, не надо извращений этих \w\W, \s\S и тд
C#
1
2
3
4
5
6
7
8
9
10
11
    #region foo
    class Program
    {
        static void Main()
        {
            string file = File.ReadAllText("../../Program.cs");
            Console.WriteLine(Regex.Match(file, @"\s*#region.+#endregion", RegexOptions.Singleline));
            Console.ReadKey();
        }
    }
    #endregion
Добавлено через 1 минуту
или просто
C#
1
Console.WriteLine(Regex.Match(file, @"(?s)\s*#region.+#endregion"));
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
03.01.2015, 22:26
Psilon, А чтоб Regionы исключить?
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
04.01.2015, 01:06
Забыли про коментарии и строки
C#
1
2
3
4
5
6
7
8
9
10
11
12
static void Main(string[] args)
{
    // #region
    // #endregion
    /*
       #region
       #endregion
    */
    string s = @"
       #region
       #endregion";  
}
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
04.01.2015, 03:42
maxillion,
C#
1
Console.WriteLine(Regex.Match(file, @"\s*#region.+#endregion", RegexOptions.Singleline));
так выводит код от #region до #endregion, а как чтоб без них
я писал @"\s*(?=#region).+(?=#endregion)", #endregion удаляет, а вот #region foo все равно выводит
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
04.01.2015, 04:03
Prog_maker,
C#
1
2
Console.WriteLine(Regex.Match(s, @"\s*(?<=\#region).+(?=\#endregion)", RegexOptions.Singleline).Value);
Console.WriteLine(Regex.Match(s, @"\s*\#region(.+)\#endregion", RegexOptions.Singleline).Groups[1].Value);
2
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
04.01.2015, 04:18
Ну вот он ответ - RegexOptions.Singleline, про это то я забыл )))
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.01.2015, 00:34
maxillion, не забыли. Регэкспами этого поймать нельзя. Они не работают с иерархическими структурами.
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
05.01.2015, 04:12
Psilon, вы случайно не такую иерархию имели виду ?

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
static void Main(string[] args)
{
    string s = @" 
         #region                           
            #region 
            1  
            #endregion  
         #endregion 
 
         #region 
         2                            
         #endregion 
 
         #region          
            #region 
            3  
            #endregion  
            #region 
            3  
            #endregion  
         #endregion   
 
         #region          
            #region 
                #region 
                4  
                #endregion 
            #endregion 
         #endregion   ";
 
    var r = new Regex(
    @"\s+\#region((?<open>\#region)|(?<-open>\#endregion)|.*?((?=\#region)|(?=\#endregion)))+(?(open)(?!))\#endregion",
    RegexOptions.Singleline | RegexOptions.ExplicitCapture);
 
    int counter = 0;           
    foreach (Match m in r.Matches(s))
        Console.WriteLine("index = " + ++counter + "\n" + m.Value);
 
   
    Console.Read();
}
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.01.2015, 05:29
maxillion, окей, оговорюсь, работать с иерархическими структурами так, чтобы это было поддерживаемо и не выглядело как г...

Не по теме:

А вообще пример замечательный, всегда хотел понять работу регэкспов с обратными ссылками. Но по вышеописанным причинам забил на это. Сложно и не нужно. Проще свой КА на коленке состряпать. И масштабировать легче, чем переписывать мега-регулярку в 100500 строк



Добавлено через 3 минуты
maxillion, я не скажу, что мега-эксперт в регулярках, но немного разбираюсь. И я уже минуты 2 смотрю в это выражение, и не могу понять, как оно работает То есть понимаю, конечно, в общих чертах, логику. Но вот в деталях, какое выражение за что отвечаю - нет. Возможно это потому что щас у меня пол шестого утра и я еще не лег спать, но есть мнение, что проблема не в этом.

Не по теме:

ну и не надо "выкать", пожалуйста, ты старше меня :) А у меня на базе этого возникают комплексы старперства

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2015, 05:29
Помогаю со студенческими работами здесь

Спарсить определенный кусок текста rss
Имеется обычная новостная rss лента Например: &lt;item&gt; &lt;title&gt; В Минэнерго пообещали не допустить дефицита топлива в России из-за...

Взять определенный кусок текста из HTML
Приветствую снова. Мне нужно взять кусок из текста, и вставить к примеру в TextBox1 Нужно, взять отсюда то, что идет после...

Библиотека itextsharp: вырезать определенный кусок текста из PDF и поместить на форму
Использую данную библиотеку для работы с PDF файлами! Создавать файлы и объединять получается, а вот как вырезать определенный кусок текста...

кусок кода
Объясните этот кусок кода пжл begin i1:=0; maxls:=-1; //fnd max for i0:= 0 to versh-1 do begin ...

кусок кода js
народ помогите пожалуйста, я вообще незнаю js,но без него не обойтись помогите разобраться в коде,вот он сам: $('#name').focus(); ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru