Ubuntu Türkiye

Yazılım => Programlama => Python => Konuyu başlatan: emryasr - 29 Aralık 2018 - 11:31:00

Başlık: bir soru
Gönderen: emryasr - 29 Aralık 2018 - 11:31:00
100 mb lık bir txt dosyası her satırda 35 karakterlik bir veri olacak
ikinci bir txt dosyasında yine aynı şekilde mesala 500 mb lık bir dosya yine satır satır 35 karakterlik

ikinci dosyadaki satırları birinci dosyadaki satırda aramak istiyorum eger ikinci dosyadaki satırlardan herhangibirini birinci dosyada bulursa eşlesen satırı başka bir txt dosyasına yazdıracak...

kısaca birinci dosyayı veri dosyası olarak kullanacak ikinci dosyadaki satırlardan herhangibirini birinci dosyada bulursa sonucu başka bir dosyaya yazdıracak
umarım sorumu anlatabilmişimdir

bu sorunu nasıl bir kodla çözerim...
Başlık: Ynt: bir soru
Gönderen: Amenofis - 29 Aralık 2018 - 19:51:59
100 mblık dosyadaki satırları alfabetik sıraya dizmekle başlayabilirsin. Opsiyonel olarak diğer dosya da sıralanabilir, böylece daha farklı algoritmalar işletilebilir.
Başlık: Ynt: bir soru
Gönderen: emryasr - 31 Aralık 2018 - 09:23:15
teşekkürler cevap için elimdeki dosyalar zaten alfebetik sıralı ve tamamı küçük harfler ve sayılardan oluşuyor...
örneğin
anadizin.txt
15abvcd....
15abvcd....
15abvcd....
15abvcd....e
.
.
.

aranan.txt
15abvcd....
15abvcd....
15abvcd....
15abvcd....
15abvcd....
.
.
.
15abvcd....e
.
.
.

aranan.txt ki ilk satırı anadizin.txt de tarıycak bulursa bulundu diyip dosyaya yazdıracak bulamazsa aranan.txt in ikinci satırına geçecek...üçüncü satır dördüncü satır sırayla işlem tekrarlanacak...
Başlık: Ynt: bir soru
Gönderen: Amenofis - 31 Aralık 2018 - 14:59:42
Ben sadece fikir verebilirim, kodu sen yazacaksın.

Bu kadar verinin içinde doğrusal arama yaparsan tamamlanması günlerce sürer. İkili arama (binary search) diye arat. İkili arama sadece sıralanmış veriler üzerinde çalışır ve bütün verinin belleğe yüklenmiş olması gerekir. Umarım yeteri kadar ram vardır makinada.

Eğer iki dosya da sıralı ise şöyle bir algoritma kurulabilir (ram optimizeli). Bu algoritma ile dosyaların üzerinden sadece 1 kere geçilir. Dosyalara a100 ve a500 diyelim.

1- a100'den bir satır oku.
2- a500'den bir satır oku.
3- Okunan satır a100'deki satırdan (alfabetik olarak) küçükse 2. adıma dön.
4- İki satırı karşılaştır. Eşit ise yeni dosyaya yaz.
5- 1. adıma atla. (Satırlar eşit değilse a100'den okunacak yeni satır ile karşılaştırılmalı).
Başlık: Ynt: bir soru
Gönderen: ahmet12 - 05 Şubat 2019 - 23:05:12
Al bakalım kardesım
https://paste.ubuntu.com/p/mxG8yCYzrB/
kullanımı ıcınde yazıyor yınede acıklayayım
ılk secenekte satırları 35 lık yapamk ıcın
1 tuslayıp enter yaz
dosya adını yaz o verılen dosyayı duzenleyıp 35 satırlık yapıp dosyayı kapatacak
2 secenek ıse 2 dosyayı eslestırırıyor
aynı olanları cıkartıp sonuc.txt yazıyor