romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

PYTHON EKSİK DEFİNE BULUCU

  • Konuyu başlatan Konuyu başlatan mgurbet1998
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 4
  • Görüntüleme Görüntüleme 456

mgurbet1998

Level 4
Uzman
Katılım
22 Eki 2024
Konular
27
Mesajlar
268
Online süresi
1mo 3d
Reaksiyon Skoru
166
Altın Konu
0
Başarım Puanı
74
MmoLira
2,281
DevLira
42
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

çalışma mantığı service.h dosyasında define olup ama projede kodu olmayan dosyaları bulur server dosyasının içindeki ana dizine makefilenin bulunduğu ana dizine koyacaksınız dosyayı python 3.13 ile çalışıyor benim ihtiyacım olduğu için chatgpt ye hazırlatmiştim umarım işinize yarar.

Python:
import os
import re

def extract_defines(service_file_path):
    """
    Verilen service.h dosyasından '#define' ile başlayan makroları ayıklar.
    Makro isimlerini bir küme (set) içerisinde döndürür.
    """
    defines = set()
    define_pattern = re.compile(r'^\s*#define\s+(\w+)\b')
  
    try:
        # Dosyayı UTF-8 ile açıyoruz, hatalı karakterleri atlamak için errors="ignore" kullanılıyor.
        with open(service_file_path, "r", encoding="utf-8", errors="ignore") as f:
            for line in f:
                match = define_pattern.match(line)
                if match:
                    defines.add(match.group(1))
    except Exception as e:
        print(f"{service_file_path} dosyası okunurken hata oluştu: {e}")
  
    return defines

def main():
    # Betiğin bulunduğu dizini temel alıyoruz.
    script_dir = os.path.dirname(os.path.abspath(__file__))
    root_dir = script_dir  # Ana dizin olarak betiğin bulunduğu dizini kullanıyoruz.
  
    # service.h dosyasının yolu: 'common' klasöründe olmalıdır.
    service_file_path = os.path.join(root_dir, "common", "service.h")
  
    if not os.path.isfile(service_file_path):
        print(f"Hata: '{service_file_path}' dosyası bulunamadı!")
        input("Çıkmak için Enter'a basın...")
        return

    print("service.h dosyasından makrolar alınıyor...")
    defines = extract_defines(service_file_path)
    if not defines:
        print("Hiç makro bulunamadı.")
        input("Çıkmak için Enter'a basın...")
        return

    print("Alınan makrolar:")
    for d in sorted(defines):
        print("  ", d)

    # Projedeki dosyaları tarayarak makro kullanımını kontrol ediyoruz.
    used_defines = set()
    valid_extensions = ('.cpp', '.h', '.hpp', '.c', '.cc', '.cxx')

    print("\nProjedeki dosyalar taranıyor...")
    for dirpath, dirnames, filenames in os.walk(root_dir):
        for filename in filenames:
            current_file = os.path.join(dirpath, filename)
            # service.h dosyasını taramaya almıyoruz.
            if os.path.abspath(current_file) == os.path.abspath(service_file_path):
                continue
            if not filename.endswith(valid_extensions):
                continue
            try:
                with open(current_file, "r", encoding="utf-8", errors="ignore") as f:
                    content = f.read()
                    for macro in defines:
                        if macro in used_defines:
                            continue
                        pattern = r'\b' + re.escape(macro) + r'\b'
                        if re.search(pattern, content):
                            used_defines.add(macro)
            except Exception as e:
                print(f"{current_file} dosyası okunurken hata oluştu: {e}")

    unused_defines = defines - used_defines

    print("\nKullanılmayan makrolar:")
    if unused_defines:
        for d in sorted(unused_defines):
            print("  ", d)
    else:
        print("Tüm makrolar başka dosyalarda kullanılmış!")

    output_file = os.path.join(root_dir, "unused_defines.txt")
    try:
        with open(output_file, "w", encoding="utf-8") as f:
            for macro in sorted(unused_defines):
                f.write(macro + "\n")
        print(f"\nKullanılmayan makrolar '{output_file}' dosyasına yazıldı.")
    except Exception as e:
        print(f"Sonuç dosyası yazılırken hata oluştu: {e}")

    input("\nÇıkmak için Enter'a basın...")

if __name__ == "__main__":
    main()



BUDA TAM TERSİ İÇİN PROJE İÇİNDE OLAN KOD AMA SERVİCE.H TA OLMAYAN DEFİNE İÇİN.

Python:
import os
import re

def extract_macros_from_file(file_path):
    """
    Verilen dosyadan, preprocessor ile ilgili makro ifadelerini ayıklar.
    Bu, hem tanımlamaları (#define) hem de koşullu ifadeleri (#ifdef, #ifndef, defined(...)) içerir.
    Makro isimlerini bir set (küme) olarak döndürür.
    """
    macros = set()
    # #define satırlarını yakalayan regex
    define_pattern = re.compile(r'^\s*#\s*define\s+(\w+)\b')
    # #ifdef ve #ifndef satırlarını yakalayan regex
    ifdef_pattern = re.compile(r'^\s*#\s*(ifdef|ifndef)\s+(\w+)\b')
    # Satır içinde defined(...) ifadelerini yakalamak için regex
    defined_pattern = re.compile(r'\bdefined\s*\(\s*(\w+)\s*\)')
    
    try:
        with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
            for line in f:
                # #define kullanımı
                m = define_pattern.match(line)
                if m:
                    macros.add(m.group(1))
                # #ifdef veya #ifndef kullanımı
                m2 = ifdef_pattern.match(line)
                if m2:
                    macros.add(m2.group(2))
                # defined(...) kullanımını satır içinde ara
                found = defined_pattern.findall(line)
                for macro in found:
                    macros.add(macro)
    except Exception as e:
        print(f"{file_path} dosyası okunurken hata oluştu: {e}")
    
    return macros

def main():
    # Betiğin bulunduğu dizini temel alıyoruz.
    script_dir = os.path.dirname(os.path.abspath(__file__))
    root_dir = script_dir  # Projenin ana dizini olarak betiğin bulunduğu dizin kullanılıyor.
    
    # service.h dosyasının yolu: ana dizinde "common" klasöründe bulunmalı.
    service_file_path = os.path.join(root_dir, "common", "service.h")
    if not os.path.isfile(service_file_path):
        print(f"Hata: '{service_file_path}' dosyası bulunamadı!")
        input("Çıkmak için Enter'a basın...")
        return

    print("service.h dosyasından makrolar alınıyor...")
    service_macros = extract_macros_from_file(service_file_path)
    print("\nservice.h dosyasında bulunan makrolar:")
    if service_macros:
        for m in sorted(service_macros):
            print("  ", m)
    else:
        print("  Hiç makro bulunamadı!")
    
    # Projedeki (service.h hariç) dosyalarda kullanılan makro isimlerini toplayalım.
    project_macros = set()
    valid_extensions = ('.cpp', '.h', '.hpp', '.c', '.cc', '.cxx')

    print("\nProjedeki dosyalar taranıyor ve makrolar toplanıyor...")
    for dirpath, dirnames, filenames in os.walk(root_dir):
        for filename in filenames:
            current_file = os.path.join(dirpath, filename)
            # service.h dosyasını taramaya almıyoruz.
            if os.path.abspath(current_file) == os.path.abspath(service_file_path):
                continue
            if not filename.endswith(valid_extensions):
                continue
            file_macros = extract_macros_from_file(current_file)
            if file_macros:
                project_macros.update(file_macros)
    
    # Artık proje içinde bulunan makro isimlerinden,
    # service.h dosyasında bulunanları çıkarıyoruz.
    extra_macros = project_macros - service_macros

    print("\nProje içinde tanımlı fakat service.h dosyasında bulunmayan makrolar:")
    if extra_macros:
        for m in sorted(extra_macros):
            print("  ", m)
    else:
        print("  Tüm makrolar service.h dosyasında mevcut!")
    
    # Sonuçları extra_defines.txt dosyasına yazıyoruz.
    output_file = os.path.join(root_dir, "extra_defines.txt")
    try:
        with open(output_file, "w", encoding="utf-8") as f:
            for macro in sorted(extra_macros):
                f.write(macro + "\n")
        print(f"\nMakrolar '{output_file}' dosyasına yazıldı.")
    except Exception as e:
        print(f"Sonuç dosyası yazılırken hata oluştu: {e}")
    
    input("\nÇıkmak için Enter'a basın...")

if __name__ == "__main__":
    main()
 
Son düzenleme:
çalışma mantığı service.h dosyasında define olup ama projede kodu olmayan dosyaları bulur server dosyasının içindeki ana dizine makefilenin bulunduğu ana dizine koyacaksınız dosyayı python 3.13 ile çalışıyor benim ihtiyacım olduğu için chatgpt ye hazırlatmiştim umarım işinize yarar.

Python:
import os
import re

def extract_defines(service_file_path):
    """
    Verilen service.h dosyasından '#define' ile başlayan makroları ayıklar.
    Makro isimlerini bir küme (set) içerisinde döndürür.
    """
    defines = set()
    define_pattern = re.compile(r'^\s*#define\s+(\w+)\b')
 
    try:
        # Dosyayı UTF-8 ile açıyoruz, hatalı karakterleri atlamak için errors="ignore" kullanılıyor.
        with open(service_file_path, "r", encoding="utf-8", errors="ignore") as f:
            for line in f:
                match = define_pattern.match(line)
                if match:
                    defines.add(match.group(1))
    except Exception as e:
        print(f"{service_file_path} dosyası okunurken hata oluştu: {e}")
 
    return defines

def main():
    # Betiğin bulunduğu dizini temel alıyoruz.
    script_dir = os.path.dirname(os.path.abspath(__file__))
    root_dir = script_dir  # Ana dizin olarak betiğin bulunduğu dizini kullanıyoruz.
 
    # service.h dosyasının yolu: 'common' klasöründe olmalıdır.
    service_file_path = os.path.join(root_dir, "common", "service.h")
 
    if not os.path.isfile(service_file_path):
        print(f"Hata: '{service_file_path}' dosyası bulunamadı!")
        input("Çıkmak için Enter'a basın...")
        return

    print("service.h dosyasından makrolar alınıyor...")
    defines = extract_defines(service_file_path)
    if not defines:
        print("Hiç makro bulunamadı.")
        input("Çıkmak için Enter'a basın...")
        return

    print("Alınan makrolar:")
    for d in sorted(defines):
        print("  ", d)

    # Projedeki dosyaları tarayarak makro kullanımını kontrol ediyoruz.
    used_defines = set()
    valid_extensions = ('.cpp', '.h', '.hpp', '.c', '.cc', '.cxx')

    print("\nProjedeki dosyalar taranıyor...")
    for dirpath, dirnames, filenames in os.walk(root_dir):
        for filename in filenames:
            current_file = os.path.join(dirpath, filename)
            # service.h dosyasını taramaya almıyoruz.
            if os.path.abspath(current_file) == os.path.abspath(service_file_path):
                continue
            if not filename.endswith(valid_extensions):
                continue
            try:
                with open(current_file, "r", encoding="utf-8", errors="ignore") as f:
                    content = f.read()
                    for macro in defines:
                        if macro in used_defines:
                            continue
                        pattern = r'\b' + re.escape(macro) + r'\b'
                        if re.search(pattern, content):
                            used_defines.add(macro)
            except Exception as e:
                print(f"{current_file} dosyası okunurken hata oluştu: {e}")

    unused_defines = defines - used_defines

    print("\nKullanılmayan makrolar:")
    if unused_defines:
        for d in sorted(unused_defines):
            print("  ", d)
    else:
        print("Tüm makrolar başka dosyalarda kullanılmış!")

    output_file = os.path.join(root_dir, "unused_defines.txt")
    try:
        with open(output_file, "w", encoding="utf-8") as f:
            for macro in sorted(unused_defines):
                f.write(macro + "\n")
        print(f"\nKullanılmayan makrolar '{output_file}' dosyasına yazıldı.")
    except Exception as e:
        print(f"Sonuç dosyası yazılırken hata oluştu: {e}")

    input("\nÇıkmak için Enter'a basın...")

if __name__ == "__main__":
    main()



BUDA TAM TERSİ İÇİN PROJE İÇİNDE OLAN KOD AMA SERVİCE.H TA OLMAYAN DEFİNE İÇİN.

Python:
import os
import re

def extract_macros_from_file(file_path):
    """
    Verilen dosyadan, preprocessor ile ilgili makro ifadelerini ayıklar.
    Bu, hem tanımlamaları (#define) hem de koşullu ifadeleri (#ifdef, #ifndef, defined(...)) içerir.
    Makro isimlerini bir set (küme) olarak döndürür.
    """
    macros = set()
    # #define satırlarını yakalayan regex
    define_pattern = re.compile(r'^\s*#\s*define\s+(\w+)\b')
    # #ifdef ve #ifndef satırlarını yakalayan regex
    ifdef_pattern = re.compile(r'^\s*#\s*(ifdef|ifndef)\s+(\w+)\b')
    # Satır içinde defined(...) ifadelerini yakalamak için regex
    defined_pattern = re.compile(r'\bdefined\s*\(\s*(\w+)\s*\)')
   
    try:
        with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
            for line in f:
                # #define kullanımı
                m = define_pattern.match(line)
                if m:
                    macros.add(m.group(1))
                # #ifdef veya #ifndef kullanımı
                m2 = ifdef_pattern.match(line)
                if m2:
                    macros.add(m2.group(2))
                # defined(...) kullanımını satır içinde ara
                found = defined_pattern.findall(line)
                for macro in found:
                    macros.add(macro)
    except Exception as e:
        print(f"{file_path} dosyası okunurken hata oluştu: {e}")
   
    return macros

def main():
    # Betiğin bulunduğu dizini temel alıyoruz.
    script_dir = os.path.dirname(os.path.abspath(__file__))
    root_dir = script_dir  # Projenin ana dizini olarak betiğin bulunduğu dizin kullanılıyor.
   
    # service.h dosyasının yolu: ana dizinde "common" klasöründe bulunmalı.
    service_file_path = os.path.join(root_dir, "common", "service.h")
    if not os.path.isfile(service_file_path):
        print(f"Hata: '{service_file_path}' dosyası bulunamadı!")
        input("Çıkmak için Enter'a basın...")
        return

    print("service.h dosyasından makrolar alınıyor...")
    service_macros = extract_macros_from_file(service_file_path)
    print("\nservice.h dosyasında bulunan makrolar:")
    if service_macros:
        for m in sorted(service_macros):
            print("  ", m)
    else:
        print("  Hiç makro bulunamadı!")
   
    # Projedeki (service.h hariç) dosyalarda kullanılan makro isimlerini toplayalım.
    project_macros = set()
    valid_extensions = ('.cpp', '.h', '.hpp', '.c', '.cc', '.cxx')

    print("\nProjedeki dosyalar taranıyor ve makrolar toplanıyor...")
    for dirpath, dirnames, filenames in os.walk(root_dir):
        for filename in filenames:
            current_file = os.path.join(dirpath, filename)
            # service.h dosyasını taramaya almıyoruz.
            if os.path.abspath(current_file) == os.path.abspath(service_file_path):
                continue
            if not filename.endswith(valid_extensions):
                continue
            file_macros = extract_macros_from_file(current_file)
            if file_macros:
                project_macros.update(file_macros)
   
    # Artık proje içinde bulunan makro isimlerinden,
    # service.h dosyasında bulunanları çıkarıyoruz.
    extra_macros = project_macros - service_macros

    print("\nProje içinde tanımlı fakat service.h dosyasında bulunmayan makrolar:")
    if extra_macros:
        for m in sorted(extra_macros):
            print("  ", m)
    else:
        print("  Tüm makrolar service.h dosyasında mevcut!")
   
    # Sonuçları extra_defines.txt dosyasına yazıyoruz.
    output_file = os.path.join(root_dir, "extra_defines.txt")
    try:
        with open(output_file, "w", encoding="utf-8") as f:
            for macro in sorted(extra_macros):
                f.write(macro + "\n")
        print(f"\nMakrolar '{output_file}' dosyasına yazıldı.")
    except Exception as e:
        print(f"Sonuç dosyası yazılırken hata oluştu: {e}")
   
    input("\nÇıkmak için Enter'a basın...")

if __name__ == "__main__":
    main()

Paylaşım için teşekkürler.
 
Paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst