Pular para conteúdo

2025

Estrutura de Projetos de Dados

#!/bin/bash

# Define a pasta de origem
SOURCE_DIR="src"

# Encontra todos os arquivos .sas e itera sobre eles
find "$SOURCE_DIR" -name "*.sas" | while read SAS_FILE; do
    # Extrai o caminho relativo do arquivo SAS
        RELATIVE_PATH="${SAS_FILE#$SOURCE_DIR/}"

                # Define o nome do arquivo Markdown de destino
                    MD_FILE="${SOURCE_DIR}/${RELATIVE_PATH%.*}.md"

                        # Cria o diretório de destino se não existir
                            mkdir -p "$(dirname "$MD_FILE")"

                                # Extrai o conteúdo entre /**DOC e */ e salva no arquivo Markdown
                                    # O 'sed -n' suprime a saída padrão, '/**DOC/,*/p' imprime o bloco,
                                        # e 's/^\/\*\*DOC//; s/\*\/$//' remove as tags de início e fim.
                                            # O 'grep -v "^\s*$" ' remove linhas em branco.
                                                sed -n '/\/\*\*DOC/,/\*\//p' "$SAS_FILE" | \
                                                    sed 's/^\/\*\*DOC//; s/\*\/$//' | \
                                                        grep -v "^\s*$" > "$MD_FILE"

                                                            echo "Extraído comentários de '$SAS_FILE' para '$MD_FILE'"
                                                            done

                                                            echo "Processo concluído."

Extraindo comentários para markdown

import os import re

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.")