2011-03-09 10 views
14

'daki bileşenlerine ayırmanın en iyi yolu nedir? Yolumda standart bir Windows Dosya Adı var. Dize dosya adı, uzantısı ve yolu ayırmak gerekir.Yol Adı'nı Lua

Şu anda sadece dizeyi geriye doğru arayan uçtan okuyordum. uzantıyı kesmek ve ilk \ yolunu almak için.

Bunu bir Lua deseni kullanarak yapabilmem gerekir, ancak dizenin sağında çalışma söz konusu olduğunda başarısız olmaya devam ediyorum.

örn. c:

bu takdirde avans özür teşekkür ederiz \ temp \ test \

  • myfile.txt
  • txt: \ temp \ test \ myfile.txt

    • c dönmelidir bir kopyasıdır, ancak diğer diller için birçok örnek bulabilirim, ama Lua için değil.

  • +1

    Sadece dize geriye için daha iyi bir yoludur okuma iddia ediyorum: Burada – sbk

    cevap

    15
    > return string.match([[c:\temp\test\myfile.txt]], "(.-)([^\\]-([^%.]+))$") 
    c:\temp\test\ myfile.txt txt 
    

    Bu tam olarak istediğiniz şeyi yapıyor gibi görünüyor.

    +0

    Çok teşekkür ederim, maç dizisi ile ne kadar oynandığımı bilmek istemiyorsunuz, nasıl çalıştığını öğrenmek için cevabınız üzerinden çalışacağım. –

    +1

    @Jane: Dikkat edilmesi gereken en önemli şey, açgözlü olmayanlar ve onların yerleştirilmesidir. – Arrowmaster

    0

    Split string in Lua?

    orada masa fonksiyonları, bölünmüş birkaç dize var "\" Eğer sürücü ve son olmak indeksi biri içeren bir tablo ile bitireceğiz böylece \ zaten bir klasör adı olamaz olarak dizin dosyasıdır.

    = string.match([[/mnt/tmp/myfile.txt]], "(.-)([^\\/]-%.?([^%.\\/]*))$") 
    "/mnt/tmp/" "myfile.txt" "txt" 
    
    = string.match([[/mnt/tmp/myfile.txt.1]], "(.-)([^\\/]-%.?([^%.\\/]*))$") 
    "/mnt/tmp/" "myfile.txt.1" "1" 
    
    = string.match([[c:\temp\test\myfile.txt]], "(.-)([^\\/]-%.?([^%.\\/]*))$") 
    "c:\\temp\\test\\" "myfile.txt" "txt" 
    
    = string.match([[/test.i/directory.here/filename]], "(.-)([^\\/]-%.?([^%.\\/]*))$") 
    "/test.i/directory.here/" "filename" "filename" 
    
    26

    (birden noktalarla veya dosyaları) noktalar olmadan dosyalarını işleme aynı zamanda Windows ve Unix yolları için çalışır ve geliştirilmiş bir versiyonu Bunu yap - desen eşleştirme bu durumda overkill, muhtemelen 10x kez daha yavaş çalışır ve bir bakım durumunda olduğunu kavramak için uzun sürecek ve kodunuzun her detayı unutmuş.