Bir çokgecik komut dosyası oluşturmaya çalışıyorum. Gerçek bir polyglot değil çünkü Shell ya da Batch tarafından "bootstrapped" olmasına rağmen, gerçekte gerçekleştirmek için birden fazla dil gerektiriyor. Bu kısmı sorun yok.Powershell: Bir dosyanın bir bölümünü bir değişkene okuyun
Sorun yaşadığım bölüm, geçerli dosyayı belleğe yükleyebilmeli ve başka bir dilde yazılmış belirli bir bölümü ayıklayabilen, bir değişkenin içinde saklayabilmesi gereken biraz gömülü Powershell kodudur. ve sonunda onu bir tercümana aktar. Dosyanın bölümlerini, diğer dillerden herhangi biriyle çakışmayacak şekilde işaretlemek için kullandığım XML benzeri bir etiketleme sistemim var.
lang_a_code
# <{LANGB}>
... code in language B ...
... code in language B ...
... code in language B ...
# <{/LANGB}>
lang_c_code
# 'yorumunu belirteçleri, ancak açıklama işaretleri bölümünden diline bağlı olarak farklı şeyler olabilir: belirteçler buna benziyor.
Sahip olduğum sorun, dosyanın yalnızca bu bölümünü ayırmanın bir yolunu bulamıyorum. Tüm dosyayı belleğe yükleyebilirim, ancak etiketler arasındaki şeyleri alamıyorum.
@ECHO OFF
SETLOCAL EnableDelayedExpansion
powershell -ExecutionPolicy unrestricted -Command^
$re = '(?m)^<{LANGB}^>(.*)^<{/LANGB}^>';^
$lang_b_code = ([IO.File]::ReadAllText(^'%0^') -replace $re,'$1');^
echo "${re}";^
echo "Contents: ${lang_b_code}";
her şey belirteçleri arasında Contents
çıktı yerine sadece kod olmanın tüm dosyasında şu ana kadar sonuç denedim: İşte benim şimdiki kodudur. İşaretleyicilerde kullanılan sembollerden kaçmak için farklı yöntemler denedim, ancak her zaman aynı şeyle sonuçlanır.
NOT: Üst düzey tercüman açılı ayraçlar ve diğer rastgele şeylere kapatırsa Toplu, çünkü ^
kullanılması gereklidir. sadece bir blok olduğundan
kullanın;'? –
Bu, aslında işaretçilerin kendileri haricinde dosyanın tüm içeriğini döndürür. Yani. lang_a # ... dili b ... # lang_c – BHarms
birkaç veya sadece bir blok var mı? Sadece bir tane ise, aynı regex'i kullanabilir, ancak '-match' operatörüyle' -match' sonucunda ayarlanan '$ match [1]' değişkenini kullanarak metne erişebilirsiniz. –