usar txt texto sobrescribir recursos manejo lineas leer escribir ejemplos crear archivos archivo agregar c# regex methods

c# - txt - Obtener los contenidos de un método de un archivo cs



sobrescribir archivo c# (6)

En general, el problema que está tratando de resolver es analizar el código C # de la misma manera que el compilador, y luego guardar el contenido de las funciones en lugar de generar el código. Entonces, como fondo para su solución, debería ver las gramáticas c # y cómo analizarlas.

Según StingyJack, un método simple para hacer esto sería crear una expresión regular que solo identifique las definiciones de funciones. Entonces puede suponer que todo lo que está en medio es un cuerpo de función. Sin embargo, esa suposición no manejará cosas como múltiples clases en el archivo o incluso el final al final de una clase. Para manejar este tipo de cosas, tendrás que diseñar el compilador de ac #, ya que procesar la gramática c # completa es lo único que identificará correctamente lo que c # cree que es una función.

Tengo un requisito para obtener el contenido de cada método en un archivo cs en una cadena. Lo que estoy buscando es que cuando se ingresa un archivo cs, se devuelve un diccionario con el nombre del método como clave y el cuerpo del método como valor.

He intentado Regex y la reflexión sin éxito, ¿alguien puede ayudar?

Gracias



No sé si te sirve, pero los complementos de Visual Studio incluyen un objeto EnvDTE, que te da acceso completo a los analizadores de lenguaje VB y C #. Ver Descubriendo el Código con el código Modelo

Lo hice tangencialmente hace años, no sé qué tan difícil es de usar, o qué tan efectivo es, pero parece que le dará lo que necesita.

El modelo de código permite a los clientes de automatización evitar la implementación de un analizador para los lenguajes de Visual Studio a fin de descubrir las definiciones de alto nivel en un proyecto, como clases, interfaces, estructuras, métodos, propiedades, etc.

Si lees el artículo completo, te dice cómo extraer el texto completo de un archivo para una función

Espero que esto ayude :)


Un analizador hecho a medida será la mejor opción. Como dijo Blair en el comentario a StingyJack, es MUY difícil analizar el código con expresiones regulares. Lo intenté una vez, y aunque es posible combinar llaves de equilibrio con NET, el escape de comentarios y cadenas es mucho más complicado.

Un analizador debería hacer las cosas mucho más simples. Ver antlr para un buen generador.

En cuanto a la reflexión, creo que podrías intentar compilar el código (siempre que tengas todas las dependencias necesarias) y luego acceder a él con el contenido Reflector. Pero iría con el analizador.


después de encontrar los encabezados de función, cuente el número de llaves hasta que encuentre el final de la función.


Suponiendo que el archivo es válido (es decir, compila), puede comenzar leyendo todo el archivo en una cadena.

Según su pregunta, deduzco que solo le interesan los nombres de los métodos, no los nombres de las clases. Luego necesita una expresión regular que le brinde todas las instancias de palabras clave públicas | privadas | opcionales, virtuales / anular, etc, MethodName , ( ,, parámetros opcionales, ) . Ayudaría si hubiera convenciones de codificación, por lo que podría suponer que todas las definiciones de métodos siempre estaban en una línea, no repartidas en varias líneas.

Una vez que tienes eso, solo es cuestión de contar {y} obtener el cuerpo de la función.

Y un último consejo: cuidado con las suposiciones . Tienen el desagradable hábito de morderte en el trasero.

EDITAR: Ouch, se olvidó de los comentarios! si tiene corchetes en los comentarios en el cuerpo del método, su conteo puede salir mal. Por lo tanto, debe quitar todos los comentarios de la fuente como primer paso.