Cemal Sener Ответов: 3

Получение моей каретки возвращается обратно в коде C#


После выполнения задачи автоматического преобразования одного проекта VB в C# инструмент, выполняющий эту задачу, удалил все возвраты каретки (\r\n) из моего кода. Теперь мне приходится очень долго и трудно читать кодовые строки.

Либо один за другим введите нужное место строки кода, чтобы получить разрыв в строке, либо необходимо использовать регулярное выражение (я имею в виду замену инструмента VS дикими символами). Регулярное выражение выполняет эту работу и разрывает линию там, где вы хотели успешно. Но как я вычисляю начальное положение новой линии? Я не хочу, чтобы новая строка начиналась с бессмысленного расстояния до левого поля. Позвольте мне привести пример:

string slsqt = "SELECT * FROM SalesTable WHERE Year(SalesDate) > 2001";


Нажмите ENTER на 'Year' в Visual Studio, и вы получите всего две такие строки:

строка slsqt = "SELECT * FROM SalesTable WHERE
Год(дата продажи) > 2001";

Хорошо, что он начинался на одну вкладку вперед от левого поля. Ну а как это сделать с помощью REGEX Replace using \r\n ?

Что я уже пробовал:

Either one by one enter on the desired location of code line to get a break in the line

3 Ответов

Рейтинг:
2

BillWoodruff

Что вы использовали для преобразования кода VB в C# ?

Форматировали ли вы VB-код с помощью Visual Studio или любого другого инструмента перед преобразованием ?

JetBrains' free 'DotPeek decompiler может просматривать любую сборку как C#: я не уверен, что это может помочь вам с вашими конкретными проблемами: [^]


Cemal Sener

это был NUGET пакет, который я не помню, так как задача закончилась 1 год назад и еще один год на отладку C# (25 проектов), теперь есть время получить визуальный боковой код, спасибо...

Рейтинг:
1

OriginalGriff

Это не будет работать как "допустимый код C#" - он будет рассматриваться как две строки кода:

string slsqt = "SELECT * FROM SalesTable WHERE
И
Year(SalesDate) > 2001";

Отсутствие завершающей двойной кавычки в первой строке приведет к ошибке, и вы получите дальнейшие ошибки для отсутствующей функции "Year", отсутствующей переменной "SalesDate" и "what is that string doing in there?" для двойных кавычек.
Вы можете сделать это, если отключите экранирование строк:
string slsqt = @"SELECT * FROM SalesTable WHERE
Year(SalesDate) > 2001";
будет рассматриваться как одна строка, но ... затем пробелы будут рассматриваться как часть строкового литерала, что делает эти два фрагмента кода функционально различными.
Это совсем не та идея с изменениями макета! :смеяться:

И... вы не можете сделать это автоматически с помощью тупого инструмента, такого как регулярное выражение: необходимое количество интервалов зависит от отступа слова string а также желаемое смещение, чтобы "совпали" две части литерала.

Если вы хотите пофлиртовать с макетами, то пусть VS сделает это за вас: "инструменты ... Опции... текстовой редактор ... С# ... Кодовый стиль ... Форматирование" дает вам множество вариантов, которые вы можете попробовать.


Cemal Sener

чтобы было понятно, что " + " не добавляется к вышеприведенной части кода...

"количество интервалов, которое вам нужно, зависит от отступа строки слова, а также желаемого смещения, чтобы "соответствовать" двум частям литерала." звучит хорошо, но как этого можно достичь с помощью регулярных выражений ?

OriginalGriff

В значительной степени вы не можете - Rexeges-это текстовые процессоры, и вы пытаетесь заставить его делать математику! Возможно, в какой-то степени это и возможно, но он будет полон особых случаев и примерно так же удобен для обслуживания, как VB-код первокурсника ...

Серьезно, используйте VS для верстки вашего кода (потому что если вы этого не сделаете, то он, вероятно, снова "испортит его" позже, когда вы его отредактируете) или напишите "code beautifier", который работает в соответствии с вашими конкретными правилами в C# или подобном, и используйте его.
Но VS, вероятно, все равно испортит это, когда вы будете редактировать вещи ... :смеяться:

Cemal Sener

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

Рейтинг:
1

Garth J Lancaster

Я удивлен, что вы не прогнали свой код через что-то вроде resharper или stylecop, или должны быть другие инструменты "lint" для C#, которые помогли бы вам переформатировать код до "какого-то приемлемого стандарта"


Cemal Sener

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

ВЫБИРАТЬ.. ОТ... WHERE had to be split after WHERE (что можно легко сделать с помощью REGEX, но вы должны добавить некоторое пространство, чтобы отступить его на следующей строке в нужное вам начальное местоположение), инструменты не знают этой логики естественным образом...

BillWoodruff

Какой из этих инструментов вы использовали на самом деле ?