Aslında boşlukları tamamen görmezden gelmek Diff


4

İki dosyayı zorlayacak ve aslında tüm boşlukları görmezden gelecek bir uygulama arıyorum, örneğin:

class foo { 
  bar
  spaz 
}

eşit derecede eşittir

class foo{bar spaz}

ya da

classfoo { 
  barspaz}

Ama değil

classfoo { 
  spazspaz
}

yani spazönceki örnekte bardiğer örneklerden herhangi birinin yerini aldığını gösteriyordu . Sadece 2 dosyayı karşılaştırmak gerekiyor.

  • Bir windows veya linux / unix / posix uyumlu bir yardımcı program olabilir.
  • Lin / unix diff -wkomutunu denedim, sadece satır başına fark boşluk ise, boşlukları yok sayar . Boşluğu tamamen görmezden gelmek için bir seçenek görmüyorum .
  • Ayrıca Windows için ücretsiz bir karşılaştırma aracı olan UECompare veya Ultracompare'i de denedim.

Tasarım gereği, diffdosyaları satır satır karşılaştırır. Yeni satırlar değişikliklere sınırlayıcı görevi görür. Onlar olmadan anlamlı bir karşılaştırma yapmak zor olurdu. shurane'ın cevabı işe yarar, ancak yorumlardaki sebeplerden daha az kullanışlıdır.
Roland Smith

Herhangi bir programlama dilinde heck, "barspaz" ile "bar spaz" ın aynısı mıdır? Çok ilginç.
Peon

Tüm boşlukları satır çubukları ve ardından diffsonuçları ile değiştirebilirsiniz . Yine de, bu büyük farklılıklar için çok sayıda çıktı satırı üretecekti. diffÖzel olarak çizgi çubuklarını işlemeden dosyaları karşılaştırmak için yeni bir programa (veya bayrağa) ihtiyacınız olduğunu düşünüyorum .
Blacklight Shining


1
Sen de kırmayı dene. Bu fark gibi satır tabanlı değil, bu yüzden ilk eşdeğeri (ikincisi olsa bile) yönetir.
ShreevatsaR

Yanıtlar:


5

trKomuta benzer bir şey mi arıyorsunuz ? İşte man sayfaları . O dahil oluyor msysgit, cygwinve gnuwin32 toolsbildiğim kadarıyla söyleyebilirim.

Böylece, farklı bir şey yapmadan önce tüm boşlukları kaldırabilirsiniz:

tr --delete '[:space:]' <filename.txt

Daha sonra bu komutun çıktısını besleyebilir ve diffboşluk bırakmadan çalışmasını sağlayabilirsiniz.

Mesela bende bir dosya var HelloWorldApp.java. Size nasıl trişlediğini göstereyim :

C:\temp>cat HelloWorldApp.java
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}
C:\temp>tr -d '[:space:]' <HelloWorldApp.java
classHelloWorldApp{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");//Displaythestring.}}

1
Bununla ilgili sorun size bir araya getirilen her şeyin tek bir çizgisini vermesidir. Eğer içine beslemek kalksa diff, diffher dosya bir çizgi vardır söyleyecektir ve çizgiler farklıdır olacaktır. Çok yardımcı değil.
Blacklight Shining

2
@BlacklightShining Şey, evet, ama sorulan şey buydu ...
evilsoup

1
@BlacklightShining OP muhtemelen beyaz alan kaldırıldıktan sonra eşleşme şanslarının olduğu çok kısa dosyalarla çalışacak. Bunun yararlı olacağı belirli bir görev düşünemiyorum ... ama bu modüler * nix komutlarının olması gereken nokta budur: böylece çoğu insanın asla düşünmeyeceği niş işler için birlikte kullanılabilirler.
evilsoup

Temel olarak, biri kısmen küçültülmüş (örneğin bazı kurallar bir satırda), diğeri ise iki CSS parçasını karşılaştırmaya çalışıyorum . Aynı kuralların yaklaşık% 90'ını içerirler. Sanırım özel bir ayrıştırıcı yazacağım.
AB Carroll,

Biraz daha anlamlı çıktılar elde etmek için tüm boşlukları silmek yerine, önce boşlukları yenisiyle değiştirmeyi deneyin:tr '[:space:]' '\n'
Seppo Enarvi

0

Satır yönelimli olmasına rağmen, istenenleri yapmak için farklılıklar yapılabilir . Kabaca, diff -w'yi yapabilir ve daha sonra diff çıktısını işlemden geçirebilirsiniz. Diff çıktısına bakabilir ve (şimdi) diğer dosyadaki çizgiyle eşleşip eşleşmediğini görmek için çeşitli çizgi çiftlerini birleştirebilir.

Görünüşe göre O (n ^ 2) veya başka bir kötü şey olabilir, fakat eğer kendini (sayın) katılmak, 2 satıra katılmak, 1 satırda 3 satıra katılmak, X katılmak, katılmak 2 satır, diff çıkışının hareketli bir "penceresinde" dosya 2'deki 3 satırı birleştirin. (burada X, "çapraz ürün" dür)

Aslında, bir Perl fark çıktısı sonrası işleme betiğinin birkaç saatlik çalışma ile yapabileceği bir iş gibi görünüyor ((Perl) programlama becerinize bağlı olarak)

Belki de işte yapmak istemediğim bir işim olduğunda ... :-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.