Excel - İki Dosyayı Karşılaştırma
-
Selam, bu işi yapan basit bir exe yaptım (aslınd biraz uğraştırdı linq kullanayım derken)
öncelikle bir kaç uyarıda bulunayım.
### programın çalışması için framework 4.0 ın kurulu olması gerek bilgisayarında (micosoftun sitesinden temin edebilirsin)
### excel dosyasının A1 ve B1 hücreleri header olarak görülüyor. O yüzden o iki hücreye rastgele bir şeyler yaz( iki excel dosyasına da yap)
##yolladığın örnek biraz sakıncalı
mesela bir alan bu şekilde belirtilmiş /trunk/SCCB/ProductLibrary/Code/db
ama B dosyasında db/ şeklinde yazılı. dikkat edersen /db ile db/ arsında fark var. ben B dosyasındaki hücrelerin A dosyasındaki ilk hücrelerde olup olmadığına bakıyorum o yüzden B nin kesinlikle A nın içinde olması gerek. db/ gibi bir ifade yerine db olması yada /db olması gerekli. Bu durumlarda dosyayı es geçer
sonuçta beni tanımıyorsunuz o yüzden dosyayı virus taramasından geçirdim. sha burada
SHA256: 9547e18ce7e39f5b20e07e535d1572cf121c3956f2829d3f7c253a0dd6d51866 File name: ExcelKarsilastirma.exe Detection ratio: 0 / 42 Analysis date: 2012-06-18 22:33:35 UTC ( 0 dakika ago )
dosyayı karşılaştırabilirsiniz. Ayrıca exeyi her hangi bir obfuscating işlemi gerçekleştirmedim kodlarına bakabilrisiniz, isterseniz projeyi de verebilirim..
buradan indirebilirsin http://depositfiles.com/files/4kfv03114
rarın içine örnek dosya1.xls ve dosya2.xls koydum. kayıt etmek istediğin excel dosyası var olması gerekli. yoksa kendisi oluşturmuyor. Acele ile yaptım hatalar olabilir.. umarım hata çıkmaz ..
dosyanın yanındaki dll exceli linq ile kullanmayla alakalı :) aslında boşuna uğraştırdı beni de bi kere ekledim okuma işlemini yaptım, baktım kayıt işlemi yok :) kayıtı da eski yöntemle yaptım..
kolay gelsin
-
Hocam hemen deniyorum eline sağlık çok makbule geçecek
-
düşey ara fonksiyonu işine yarayabilir
-
ltcelik bunu yazdı:
-----------------------------düşey ara fonksiyonu işine yarayabilir
-----------------------------Hocam yarıyordur da nasıl yapıldığını bilmiyorum. =VLOOKUP(A1;A1:B9;2;FALSE) tamam bu derecede biliyorum ama benim olayda işin içine string içinde string aramaya benzer bir olay giriyor. + 6000 civarı kelime için nasıl uyarlayacağım hakkında en ufak bir fikrim yok.
-
Sıkıntını şimdi anladım..
senin işin metin fonksiyonlarıyla...
EXCELL de metin metin ara metin birleştir gibi fonksiyonlar vardı sanırım bu gibi işler için..
aratırsan bir sürü örnek bulursun...
ben de çok bilgili değilim de
ilikin bir algoritma geliştirmelisin kafanda
şu an pek müsait değilim belki akşam biraz bakarım..
-
Birşey sormak istiyorum..
veri bloklarında ortak dizi parçalarında ilk iki karakter yada üç mutlaka ortak mı?
Eğer öyle ise ortaklık koşulunu sağlayan ve bunu ayıklamayı sağlayan algoritma epey basitleşecek...
-
Bir örnek vermem gerekirse;
A dosyası:
/trunk/SCCB/ProductLibrary/Code/src/core/util/Array.php
B dosyası:
src/core/util/Array.phpDeveloped
excel dosyalarındaki iki farklı bilgi bu şekilde hocam.
-
@ltcelik, src/core/util/Array.phpDeveloped
buradaki developed ayrı hücrede bunu gözden kaçırma.. vba ile de yapılabilir aslında. vba biliyorsan onunla uğraşabilrisin. excelden çözmek zor gibi görünüyor. en azından ben beceremem
-
Kendime bir C programı yazarak halletmeye çalıştım. 1.txt ve 2.txt içine gerekli bilgileri attım sonucu 3.txt olarak alabiliyorum. Ama bazı eşleşmeyen sonuçlar olabiliyor, bu sonuçlar programı patlattı. Else in içini doğru şekilde nasıl yazmam gerektiğini bilemedim.
edit/ örnek olarak 1.txt içine
C:\ceylin\hasan\deneme3.php
C:\ceylin\hasan\deneme.php
C:\ceylin\hasan\deneme2.php
C:\ceylin\hasan\deneme1.php
C:\ceylin\hasan\deneme4.php
ve 2.txt içine
hasan\deneme2.php N/Aaaa
hasan\deneme1.php Path
hasan\deneme4.php N/A
hasan\deneme.php Path
hasan\deneme3.php Developed
yazarak sonuçları görebilirsiniz.
#include
#include
#include
#include
int main(){
FILE *dosya1,*dosya2,*dosya3;
char ilk[50],ikinci[50],son[1000],gikinci[50];
int i;
dosya1=fopen("D:\\1.txt","r");
dosya2=fopen("D:\\2.txt","r");
dosya3=fopen("D:\\3.txt","a+");
while(!feof(dosya2)){
fscanf(dosya2,"%s%s",ilk,ikinci);
while(!feof(dosya1)){
fscanf(dosya1,"%s",son);
if(strstr(son,ilk)!= NULL )
{
fprintf(dosya3,"%s %s\n",son,ikinci);
rewind(dosya1);
break;
}//if
}//whiledosya1
} //whiledosya2
fclose(dosya3);
fclose(dosya1);
fclose(dosya2);
getch();
return 0;
}
-
Burdaki sıkıntı yani asıl konumuz 1.bloktaki dzinin son kısmıyla 2. bloktaki dzinin baş kısmında ortak dizi parçasının var olup olmadığını excel komutlarıyla "tesbit etmek".. bu tesbit yapıldığı an zaten excelin metin fonksiyonları işi çok basit halleder