def extract_sas_comments_to_markdown(source_dir):
"""
Extrai comentários /*DOC ... / de arquivos SAS e os salva em arquivos Markdown.
Args:
source_dir (str): O diretório raiz onde os arquivos .sas estão localizados.
"""
# Expressão regular para encontrar o bloco de comentário /**DOC ... */
# re.DOTALL permite que o '.' case com quebras de linha
comment_pattern = re.compile(r'/\*\*DOC(.*?)?\*/', re.DOTALL)
for root, _, files in os.walk(source_dir):
for file in files:
if file.endswith(".sas"):
sas_file_path = os.path.join(root, file)
markdown_file_path = os.path.join(root, file.replace(".sas", ".md"))
print(f"Processando arquivo: {sas_file_path}")
try:
with open(sas_file_path, 'r', encoding='utf-8') as f:
content = f.read()
# Encontra todas as ocorrências do padrão de comentário
matches = comment_pattern.findall(content)
if matches:
with open(markdown_file_path, 'w', encoding='utf-8') as md_file:
for match in matches:
# Remove linhas em branco extras no início/fim e grava o conteúdo
cleaned_comment = os.linesep.join([line.strip() for line in match.strip().splitlines() if line.strip()])
if cleaned_comment: # Garante que não escreve blocos vazios
md_file.write(cleaned_comment)
md_file.write(os.linesep * 2) # Adiciona duas quebras de linha entre blocos
print(f"Comentários extraídos para: {markdown_file_path}")
else:
print(f"Nenhum comentário /**DOC*/ encontrado em: {sas_file_path}")
except Exception as e:
print(f"Erro ao processar o arquivo '{sas_file_path}': {e}")
# Define a pasta de origem
SOURCE_DIRECTORY = "src"
# Executa a função
extract_sas_comments_to_markdown(SOURCE_DIRECTORY)
print("Processo concluído.")