{"id":187,"date":"2011-02-14T16:20:22","date_gmt":"2011-02-14T22:20:22","guid":{"rendered":"http:\/\/sergiob.org\/wordpress\/?p=187"},"modified":"2011-02-14T16:20:22","modified_gmt":"2011-02-14T22:20:22","slug":"extraer-nombres-de-rutinas-en-codigos-fuente-tipo-c","status":"publish","type":"post","link":"https:\/\/blog.sergiob.org\/?p=187","title":{"rendered":"Extraer nombres de rutinas en c\u00f3digos fuente tipo C"},"content":{"rendered":"<p>Bien dicen que la necesidad es la madre de la invenci\u00f3n.<\/p>\n<p>Ten\u00eda que extraer todos los nombres de rutinas de las diferentes clases de C# que he estado trabajando. Despu\u00e9s de buscar en Visual Studio por alguna opci\u00f3n que me permitiera hacer esto de manera sencilla &#8211; y vaya que busqu\u00e9 &#8211; me desesper\u00e9 y pens\u00e9&#8230; finalmente son texto plano, no? Las clases, esto es.<\/p>\n<p>Pues, \u00a1claro que lo son! Y entonces <em>awk<\/em> viene muy al caso. El siguiente script sirve para cualquier c\u00f3digo fuente tipo C (rutinas con par\u00e1metros entre par\u00e9ntesis, c\u00f3digo de la rutina entre llaves) &#8211; siempre y cuando las llaves no est\u00e9n nunca en la misma l\u00ednea que el nombre de la rutina (una pr\u00e1ctica relativamente com\u00fan). Ejemplo de lo que sirve:<\/p>\n<p><code>modificador modificador RUTINA(par\u00e1metros si los hay)<br \/>\n{<br \/>\n...<br \/>\n}<\/code><\/p>\n<p>o tambi\u00e9n<\/p>\n<p><code>modificador modificador RUTINA(par\u00e1metros si los hay)<br \/>\n{...}<\/code><\/p>\n<p>o cualquier combinaci\u00f3n entre ellas. Luego entonces, el script:<\/p>\n<p><code>awk 'BEGIN{x=0;} {if($0 ~ \/{\/) x=x+1; if($0 ~ \/}\/) x=x-1; if(x==0 && $0 !~ \/}\/) print $0;}' <ARCHIVO><\/code><\/p>\n<p>N\u00f3tese que esto no nos quita los modificadores, solo el c\u00f3digo intermedio. Si queremos quitar todo lo dem\u00e1s, podemos utilizar sed &#8211; pero despu\u00e9s de 10 minutos de jugar con \u00e9l me doy cuenta que no es trivial (al menos ahorita \u00ac\u00ac) y lo dejo para otro post &#8211; o como dijeran mis libros de la prepa: &#8220;Queda como ejercicio para el lector&#8221;.<\/p>\n<p>\ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bien dicen que la necesidad es la madre de la invenci\u00f3n. Ten\u00eda que extraer todos los nombres de rutinas de las diferentes clases de C# que he estado trabajando. Despu\u00e9s de buscar en Visual Studio por alguna opci\u00f3n que me permitiera hacer esto de manera sencilla &#8211; y vaya que busqu\u00e9 &#8211; me desesper\u00e9 y &hellip; <a href=\"https:\/\/blog.sergiob.org\/?p=187\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Extraer nombres de rutinas en c\u00f3digos fuente tipo C&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,12,20,25],"tags":[46,65,82,119,128],"class_list":["post-187","post","type-post","status-publish","format-standard","hentry","category-c","category-geek","category-regex","category-unix","tag-cosas-importantes-que-no-interesan-a-nadie","tag-hacking-lite","tag-linux","tag-supergeek","tag-windows"],"_links":{"self":[{"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/posts\/187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=187"}],"version-history":[{"count":0,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=\/wp\/v2\/posts\/187\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.sergiob.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}