Bir elektronik tablonun arkasındaki veri yapıları nelerdir?


35

Bir e-tablonun (adlandırılmış veya başka şekilde tanımlanmış hücre içeren değerleri veya diğer hücrelere gönderme yapan formülleri içeren bir grup) nasıl çözüldüğünü anlamak istiyorum. Mevcut projelere bakmayı denedim, ancak elektronik tabloyu bulamadığım GUI, seri hale getirme, olaylar vb. İle ilgili birçok şey oldu.

En basitinde nasıl çalışır?


1
Çok az bir GUI'ye (ve böylece problemin etinden daha az dikkat dağıtma) olan bir elektronik tablo uygulamasına bakmak istiyorsanız, sc: linuxjournal.com/article/10699?page=0,0
itsbruce

Yanıtlar:


21

Özünde, elektronik tablo, dinamik yazmalı işlevsel bir dildir ve her işlev veya değer, matristeki bir hücre olarak gösterilebilir.

Yerine gibi şeylerin parçası bir hücrede kendisi yerleştirilir.(defn some-name ...)some-name

Dinamik olarak güncellenen bir fonksiyonel dil ide'sine (clojure için lighttable gibi) giderseniz, bir elektronik tablo ile aynı işlevselliğin çoğunu göreceksiniz. Bir adı bir değere bağlayın, bu değeri kullanan bir işlev yazın, değeri değiştirin ve işlev çıktısı hemen değişir. Bu, excel in =A1 + B2yerine yazmak gibi bir şey yapmakla aynı şeydir C3.

Bu nedenle, işlevsel programcılar genellikle elektronik tabloları oyuncak programlar olarak yazmayı severler ... ve de araştırma makalelerinin konusu. (Evet, üzgünüm, hepsi bir ACM.org ödeme duvarı arkasında)

  • Elektronik tablo işlevsel programlama

    İşlevsel programlama topluluğu elektronik tablolara biraz ilgi gösterdi, ancak şaşırtıcı bir şekilde hiç kimse Excel gibi standart bir elektronik tablo hazırlamayı düşünmemiş gibi görünüyor, Haskell gibi standart bir işlevsel programlama dili ile çalışıyor. Bu yazıda, bunun yapılabilecek bir yolunu gösteriyoruz. Umudumuz, böyle yaparak, elektronik tablo programcılarına işlevsel programlamayı denemek için yardımcı olabiliriz.

  • Formlar / 3: Elektronik tablo paradigmasının sınırlarını keşfetmek için birinci dereceden bir görsel dil

    Her ne kadar işlevsel programlamanın uyarıcıları, çoğu zaman programcıların anlaması ve kullanması için işlevsel programlamanın çok zor ya da sezgisel olduğunu iddia etse de, elektronik tabloların popülaritesine bakarak bunun tersine kanıtlar bulunabilir. İşlevsel programlama paradigmasının birinci dereceden bir alt kümesi olan elektronik tablo paradigması, hem programcılar hem de son kullanıcılar arasında geniş kabul görmüştür. Yine de çoğu elektronik tablo sistemiyle ilgili birçok sınırlama vardır. Bu yazıda, birinci dereceden, bildirimsel değerlendirme modelinden sapmadan, bu sınırlamaların çoğunu ortadan kaldıran dil özelliklerini tartışıyoruz.

  • İşlev elektronik tablolarını uygulama

    E-tablolarla büyük miktarda son kullanıcı geliştirme işlemi yapılır. Elektronik tablo metaforu çekicidir, çünkü görseldir ve etkileşimli deneyi barındırır, ancak Peyton Jones, Blackwell ve Burnett tarafından gözlemlendiği gibi, elektronik tablo metaforu en temel soyutlamayı bile kabul etmez: bir ifadeyi adlandırılmış bir işleve çevirmek. Bu nedenle, belirtilen giriş ve çıkış hücrelerine sahip bir çalışma sayfası olarak bir işlevi tanımlamanın bir yolunu önerdiler; ona bir işlev sayfası diyeceğiz.


Vikipedi’de Vikipedi’nin başlangıcı, nasıl uygulanacağı konusunda bazı ipuçları verir:

Bir elektronik tablo, verilerin tablo şeklinde düzenlenmesi ve analiz edilmesi için kullanılan etkileşimli bir bilgisayar uygulama programıdır. Elektronik tablolar, kağıt muhasebe çalışma sayfalarının bilgisayarlı simülasyonları olarak geliştirildi. Program, bir dizinin hücreleri olarak temsil edilen, satır ve sütunlarda düzenlenmiş veriler üzerinde çalışır. Dizinin her hücresi, sayısal veya metin verilerini içerebilen model görünüm denetleyici bir öğe veya diğer hücrelerin içeriğine göre bir değeri otomatik olarak hesaplayan ve görüntüleyen formüllerin sonucudur.

Bu Bina Java kütüphaneleri ifadesini bulan Model-View-Controller paradigmanın Anahat . Yazar (biraz da '93 -'96 yazılmış tarihli) söz uygulamaları devam ediyor ve gider kendi web sayfasını bahseder http://csis.pace.edu/~bergin/Java/applets.htm evet ( , applets) ilgili elektronik tablo kodu için http://csis.pace.edu/~bergin/Java/Spreadsheet.java

E-tablonun tamamının dokümantasyon dahil olmak üzere bu uygulama 570 satırında o kadar büyük olmadığını belirteceğim.

Bununla birlikte, dile bağlı olarak, muhtemelen seyrek bir dizideki sadece fonksiyon işaretçileriyle yapabileceğinizi söyledi.


32

Kavramsal olarak, her hücre, yönlendirilmiş bir asiklik grafiğin bir düğümüdür ve diğer hücrelere yapılan referanslar, bu grafikte kenarları oluşturur. Bir hücreyi değiştirdiğinizde, değiştirdiğiniz hücreden erişilebilen tüm düğümlerin topolojik bir sıralaması size hücreleri değerlendirmeniz için gereken emri verecektir. Doğru sırayı belirledikten sonra, sadece standart ifade ayrıştırma işlemidir.


3
Bana nitty diyin, ancak bir elektronik tabloda hiçbir döngü oluşturamayacağınızın garantisi yoktur. Aslında, bunu Excel ile test ettim, bir uyarı aldım, ancak bunu göz ardı ederek kolayca döngüsel bir referans oluşturabilirim.
Doktor Brown

1
@DocBrown Döngüde yakalanmamak ve programı dondurmaktan kaçınmak için, muhtemelen son bağlantıda, buna neden olacak şekilde kesilir.
Izkata

1
İyi nokta, @DocBrown. Yinelemeye izin vermeye karar verseniz bile, çevrimi tespit etmeniz ve hesaplama sırası için bir DAG gibi davranmanız gerekir. Sadece bu siparişi birden çok kez geçiyorsunuz.
Karl Bielefeldt

Bu tür DAG bağımlılıklarını simüle etmek için hangi veri yapıları kullanılabilir? Bitişiklik matrisini kontrol ediyordum ama bir * n dizisi ile nitelikleri düğüm ve kenarlarla ilişkilendiremedik. Örneğin, hücre üzerindeki formül, özelliklerden biri olacaktır
Andy Dufresne

6

Daha önce belirtildiği gibi, bir elektronik tablo basit bir karma veya sözlükte depolanan DAG (yönlendirilmiş asiklik grafik) olarak kolayca uygulanabilir. Oynamak için bazı basit kodlar muhtemelen onu anlamanın en kolay yoludur:

Çok basit bir Python sürümü: http://code.activestate.com/recipes/355045-spreadsheet/

Bu, bu blog yazısında açıklandı ve ayrıntılandırıldı: http://ralsina.me/weblog/posts/BB585.html

Ayrıca burada GUI içeren basit bir JavaScript sürümü var: http://jsfiddle.net/ondras/hYfN3/


0

MS Excel dosya amacı fonksiyon hücrelerinin yapısını Python'a dönüştürmenize izin veren bir python paketini kodladım. XL2py

Hücre değerleri bir dict () türüne ayrıştırılır, nesne değerleri eklenir. Formüllerle diğer hücrelere referans veren hücreler, düğümleri içerir. Düğümler, değeri formülüyle tanımlanan bir hücreye karşılık gelir. Her bir düğüm formülünden, dairesel referansların olup olmadığını tanımlamak için bir bağımlılık yapısı tanımlanır. Düğüm hesaplama siparişleri, ilgili hücrelere bağımlılık yapıları dikkate alınarak tanımlanır.

G / Ç ağaç yapısından itibaren, Python'da bulunan herhangi bir en aza indirme algoritması uygulamasını istediğiniz gibi kullanabilirsiniz.

Https://github.com/gusmaogabriels/XL2py adresine bir göz atmanızı öneririm

Saygılarımla, Gabriel

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.