mavzermete 1
mavzermete
darkbey42 1
darkbey42
xranzei 1
xranzei
Bvural41 1
Bvural41
PrimeAC 1
PrimeAC
Payidar2 1
Payidar2
Fethi Polat 1
Fethi Polat
Wizard' 1
Wizard'
shrpnl 1
shrpnl
Queinn 1
Queinn
NovaLst 1
NovaLst
InfernoShade 1
InfernoShade
Hikaye Ekle

service.h karşılaştırıcı

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

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

Adsız.png


öncelikle cmd penceresini açıyoruz

pip install chardet

yazıp enter tusuna basıyoruz

1.h ve 2.h dosyaları olarak çalışıyor 2.h kendi service.h dosyamız 1.h diğer service.h dosyamız çıktı oluşturuyor zaten uzun uzun anlatmaya gerek yok.

Python:
import re
import chardet
import argparse

def detect_encoding(file_path):
    """
    Dosyanın bayt modunda içeriğini okuyarak kodlamasını tespit eder.
    """
    with open(file_path, 'rb') as f:
        rawdata = f.read()
    result = chardet.detect(rawdata)
    encoding = result['encoding']
    print(f"'{file_path}' dosyasının kodlaması: {encoding}")
    return encoding

def dosya_okuma(dosya_adi):
    """
    Belirtilen dosyayı okuyup, içerisindeki '#define' komutlarını
    ve tanımlanan makro isimlerini liste olarak döndürür.
   
    Yorum satırları (// ile başlayan kısımlar) dikkate alınmaz.
    """
    defineler = []
    try:
        encoding = detect_encoding(dosya_adi)
        # Hatalı karakterleri 'replace' ile değiştirme seçeneği eklenmiştir.
        with open(dosya_adi, 'r', encoding=encoding, errors='replace') as file:
            for satir in file:
                # Satırdaki '//' ile başlayan kısmı yorum olarak kabul edip atıyoruz.
                satir_no_comment = satir.split('//')[0]
                # Düzenli ifade: satır başında boşluklar, '#define' ve ardından makro adı (sadece harf, rakam, alt çizgi)
                match = re.match(r'^\s*#define\s+(\w+)', satir_no_comment)
                if match:
                    defineler.append(match.group(1))
    except FileNotFoundError:
        print(f"Dosya bulunamadı: {dosya_adi}")
    except UnicodeDecodeError as e:
        print(f"Dosya '{dosya_adi}' okunurken bir karakter hatası oluştu: {e}")
    return defineler

def eksik_defineler(dosya1, dosya2):
    """
    İlk dosyada yer alan, fakat ikinci dosyada bulunmayan #define ifadelerini döndürür.
    """
    dosya1_defineler = dosya_okuma(dosya1)
    dosya2_defineler = dosya_okuma(dosya2)
   
    # İkinci dosyadaki makro isimlerini hızlı arama için kümeye çeviriyoruz.
    dosya2_set = set(dosya2_defineler)
   
    # İlk dosyadaki, ikinci dosyada bulunmayan makro isimlerini seçiyoruz.
    eksikler = [define for define in dosya1_defineler if define not in dosya2_set]
    # Eğer aynı makro birden fazla tanımlanmışsa tekrarı önlemek için:
    eksikler = list(dict.fromkeys(eksikler))
    return eksikler

def parse_arguments():
    """
    Komut satırı argümanlarını ayrıştırır.
   
    --file1 : Birinci dosya adı (varsayılan: 1.h)
    --file2 : İkinci dosya adı (varsayılan: 2.h)
    --output: Çıktı dosyasının adı (varsayılan: eksik_defineler.txt)
    """
    parser = argparse.ArgumentParser(
        description="İki dosya arasında #define ifadelerini karşılaştırarak eksikleri bulur."
    )
    parser.add_argument("--file1", type=str, default="1.h",
                        help="Birinci dosya adı (default: 1.h)")
    parser.add_argument("--file2", type=str, default="2.h",
                        help="İkinci dosya adı (default: 2.h)")
    parser.add_argument("--output", type=str, default="eksik_defineler.txt",
                        help="Çıktı dosyasının adı (default: eksik_defineler.txt)")
    return parser.parse_args()

def main():
    args = parse_arguments()
    dosya1 = args.file1
    dosya2 = args.file2
    output_file = args.output

    eksik_listesi = eksik_defineler(dosya1, dosya2)
   
    # Sonuçları çıktı dosyasına yazıyoruz.
    try:
        with open(output_file, 'w', encoding='utf-8') as f:
            if eksik_listesi:
                f.write("Birinci dosyada olup ikinci dosyada olmayan defineler:\n")
                for define in eksik_listesi:
                    f.write(define + "\n")
            else:
                f.write("Birinci dosyada olup ikinci dosyada olmayan bir define bulunmuyor.\n")
        print(f"Sonuçlar '{output_file}' dosyasına yazıldı.")
    except Exception as e:
        print(f"Çıktı dosyası yazılırken hata oluştu: {e}")

if __name__ == "__main__":
    main()
 

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

Geri
Üst