Kaynak satırı 1c'de yanlış sayıda kategori. Dizelerle çalışmak için yeni işlevler

Kaynak satırı 1c'de yanlış sayıda kategori.  Dizelerle çalışmak için yeni işlevler
Kaynak satırı 1c'de yanlış sayıda kategori. Dizelerle çalışmak için yeni işlevler

Bir programlama dilinin temel yetenekleri genellikle sayılar ve dizelerle çalışmayı içerir. Genellikle bu özellikler derleyici koduna sabit olarak kodlanır (veya programlama dilinin "temel" sınıfları uygulanır).

1C'de dizelerle çalışma yeteneği platformun kendisinde programlanmıştır. Bugün yerleşik 1C dilindeki programlarda 1C dizeleriyle çalışmanın özelliklerine bakacağız.

Satır değeri 1C

1. En basitiyle başlayalım. Bir değişken oluşturmak ve ona sabit bir dize değeri atamak 1C'de şöyle görünür:

Değişken = "Merhaba dünya!";

Sabit bir 1C dize değerinde bir tırnak karakteri belirtmeniz gerekiyorsa, onu iki katına çıkarmanız gerekir ""

Değişken = "Merhaba dünya"!;

2. Satır sonu 1C aynı anda iki şekilde belirtilebilir. İlki | sembolünü kullanıyor.

Değişken = "Merhaba,
| dünya! ";

İkincisi, Semboller sistemi numaralandırmasını kullanmaktır. Hem 1C satır sonlarını hem de TAB gibi diğer yazdırılmayan karakterleri eklemenizi sağlar.

Değişken = "Merhaba" + Semboller.PS + "barış!";

3. 1C'deki konfigürasyonlar yalnızca bir dil için (Rusça, İngilizce veya başka bir) değil, aynı anda birkaç dil için de geliştirilebilir. Bu durumda, şu anda kullanılan dil 1C penceresinin altında seçilir.

Dillerin listesi Genel/Diller bölümündeki yapılandırma penceresinde bulunur. Her dilin aşağıdaki gibi kısa bir tanımlayıcısı vardır: ru veya ingilizce.

Böyle bir konfigürasyon programlanırken 1C hatlarının da çok dilli olabileceği açıktır. Bunu yapmak için, şunu belirterek böyle bir 1C satırı oluşturmak mümkündür; Dil tanımlayıcıya göre seçenekler:

Variable = "ru=""Merhaba dünya! ""; en=""Merhaba dünya! """;

Bu şekilde oluşturulan 1C satırını her zamanki gibi kullanırsanız, içinde yazılanlar olacaktır. Sistemin bunu iki seçeneğe ayırması ve istediğiniz seçeneği kullanması için НStr() işlevini kullanmanız gerekir:

//iki dilli yapılandırmalar için doğru
Rapor(NStr(Değişken));

1C hat tipine sahip aksesuarlar

Nitelik, 1C dizinindeki/belgesindeki bir alandır. 1C dilindeki bir programdaki değişkenden, öznitelik için türünün tam olarak belirtilmesi (sayı, 1C dizesi vb.) bakımından farklılık gösterir. Bir pervanenin ne olduğuna dair hafızanızı tazelemeniz gerekiyorsa aşağıdaki dersi izleyin.

Öznitelik türünü belirtirseniz - satır 1C, o zaman ek olarak parametreleri de belirtmeniz gerekir.

1C satırları sınırsız uzunlukta (uzunluk = 0 olarak gösterilir) ve sınırlı uzunlukta gelir; bu da karakterlerin tam sayısını gösterir. Sınırsız uzunluktaki 1C hatları ayrı bir yerde saklanır SQL tablosu dolayısıyla kullanımları sınırlı olmaktan çok daha az verimlidir.

Bu nedenle sınırsız uzunluktaki 1C dizilerinin kullanımının sınırlamaları vardır - bunları her yerde kullanmak mümkün değildir. Örneğin belge numarası, referans kodu veya ölçü olarak kullanılmasına izin verilmez.

1C dizeleriyle çalışma

Dizelerle çalışmak için 1C platformunun birkaç yerleşik işlevi vardır.

  • AbbrLP (“İnanılmaz ama gerçek!”)
    1C satırından kaldırılır ekstra boşluklar. Ayrıca herhangi bir türü 1C dizesine (örneğin sayılar) dönüştürmek için de kullanılabilir.
  • Değişken = "Vasya" + AbbrLP(" artı") + "Olya"; //"Vasya artı Olya" olacak
    Birkaç 1C dize değerinin toplanmasına bir örnek. Sonuç bir satır 1C olacaktır.
  • Değişken = Lev("Müzik", 2); //"Mu" olacak
    Değişken = Orta("Müzik", 2, 2); //"tehdit" olacak
    Değişken = Haklar("Müzik", 2); //"ka" olacak
    1C dizesinden bir alt dize elde etmek için çeşitli seçenekler.
  • Değişken = Bul("Müzik", "zy"); //3 tane olacak
    1C dizesinde 1. karakterden başlayarak bir alt dize arayın.
  • Değişken = StrLength("Müzik"); //6 tane olacak
    1C satırındaki karakter sayısını döndürür.
  • Report("Merhaba") //1C penceresinin altındaki mesaj penceresinde
    Alert("Merhaba") //açılır iletişim kutusu
    Status("Merhaba") //sol alttaki durum görüntüleme satırında
    .

Nesneleri 1C çizgisine getirme

Bildiğiniz gibi şu anda yapılandırılmış bilgi alışverişinde kullanılan en popüler format XML'dir. Eşit en son sürüm MS Ofis Kelimesi ve Excel dosyaları bu formatta kaydeder (sırasıyla docx ve xlsx, uzantıyı zip olarak değiştirir, bir arşivleyicide açar).

Veri alışverişi için 1C platformu, ana olanı da XML olan çeşitli seçenekler sunar.

1. En basit yöntem Abbreviation() veya String() işlevini kullanmaktır. İstek gövdesinde REPRESENTATION() işlevini kullanabilirsiniz. Eylemlerinin sonucu aynıdır; kullanıcı için herhangi bir 1C nesnesinin dize temsilini oluştururlar.

Bir dizin için varsayılan olarak adı bu olacaktır. Bir belge için – belgenin adı, numarası ve tarihi.

2. Herhangi bir 1C nesnesi (kısıtlamalarla) XML'e dönüştürülebilir ve bunun tersi de geçerlidir. Dönüştürme işlemine serileştirme denir.

StringViewXml = XMLString(Value); //1C değerinden XML alın
Value1C = XMLValue(Type("DirectoryLink.Nomenclature"),TypeStringXml); //XML stringinden 1C değerini alıyoruz, alınması gereken 1C tipini belirtmelisiniz

3. 1C platformunun herhangi bir 1C nesnesini bir dizgeye dönüştürmenin kendi yolu vardır. 1C 7.7 sürümünden taşındı. Bu format diğer programlar tarafından anlaşılmaz, ancak diğer 1C bunu anlar, bu da onu 1C veritabanları arasında alışveriş için kullanmayı kolaylaştırır.

Satır = ValueInRowInt(Value1C); //1C değerinden 1C dizesini alıyoruz
ValueVFile("C:\MyFile.txt", Value1C); //başka bir seçenek olarak, 1C değerinden kaydedilmiş bir dize içeren bir dosya alırız
Value1C = ValueFromStringInt(String); //1C satırından geri dön
Value1C = ValueFile("C:\MyFile.txt"); //dosyadan geri dön

Formdaki 1C satırlarını düzenleme

1C dilindeki bir programda 1C dizeleriyle çalışmanın yanı sıra elbette kullanıcının bunları düzenleyebilmesini isterim. Bunun için birkaç olasılık var:

1. En kolay yol, talep üzerine 1C hattının girişini talep etmektir. Bu yöntem 1C programlamayı öğretirken kullanılır; hayatta çok daha az kullanılır (ama kullanılır!).

Değişken = "";
Satır = EnterValue(Değişken, "Tam Adı Girin");

2. Bir 1C nesnesinin (dizin/belge) ayrıntılarını veya form ayrıntılarını (bkz.) görüntülemek için çoğunlukla bir giriş alanı kullanılır. Bu, kullanıcının düzenleme alanlarıyla çalışması için 1C'deki en yaygın araçtır.

3. Giriş alanının yetenekleri genişletilebilir (bkz. giriş alanının özellikleri, sağ tıklamaüzerinde daha fazla ayrıntı var):

  • Onay Kutusu Çok satırlı düzenleme modu
  • Gelişmiş düzenleme onay kutusu (önceki onay kutusu işaretliyse kullanılabilir)
  • Onay Kutusu Şifre modu (bkz.).

4. Giriş alanının tüm yetenekleri sizin için yeterli değilse yerleşik bir düzenleyici bulunmaktadır. Forma eklemek için Form/Ekle kontrol menüsüne Alan eklemeniz gerekir. metin belgesi. Özelliklerinde çalışma modunu (Uzantı özelliği) belirleyebilirsiniz.

Bir metin belgesi alanı doğrudan verilerle ilişkilendirilemez. Formun OnOpen() olay işleyicisine bir işlev yazmak gerekir (bkz.):

Form Elements.ElementNameTextDocumentField.SetText(ValueString); //burada ValueString, örneğin nitelikten alınan metindir

Kaydetme işleyicisinde (örneğin, Kaydet düğmesinde) bir kaydetme ekleyin:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //Value Buradaki satır değeri kaydettiğimiz özelliktir

5. 1C sürüm 8.2.11'de, kontrollü formlar, göründü yeni fırsat 1C satır gösterimi – Biçimlendirilmiş belge alanı.


Bir metin belgesinin alanına benzer şekilde, onu açarken ayarlamanız ve programı kullanarak kendiniz kaydederken not etmeniz gerekir.

  • Formunu oluşturduğumuz 1C nesnesine (dizin, belge, işleme vb.) - Değer Depolama türüne sahip bir nitelik ekleyin
  • OnReadOnServer() işlevinde, özelliğin metnini ayarladık

    //burada Nitelik, 1C nesnesinin eklenen niteliğidir
    //burada FormattedDocument formda düzenlenecek alanın adıdır
    &Sunucuda

    FormattedDocument = CurrentObject.Attributes.Get();
    Prosedürün Sonu

  • BeforeWritingOnServer() fonksiyonunda veya butonunu kullanarak alandaki metni yazacağız.

    &Sunucuda
    OnServer(CurrentObject) Okunduğunda Prosedür
    CurrentObject.Props = NewValueStorage(FormattedDocument);
    Prosedürün Sonu

Yerleşik dil 1C'deki 1C 8.3'teki satırlar, ilkel bir türün değerlerini temsil eder Astar. Değerler bu türden isteğe bağlı uzunlukta bir Unicode dizesi içerir. Dize türü değişkenler tırnak içine alınmış bir karakter kümesidir.

Örnek 1. Metin içeren bir dize değişkeni oluşturalım.

StringVariable = "Merhaba dünya!";

1'lerde dizelerle çalışma işlevleri 8.3

Bu bölüm, 1c'deki satırları değiştirmenize veya bunların içerdiği bilgileri analiz etmenize olanak tanıyan ana işlevleri sağlayacaktır.

StrLength

StrLength(<Строка>) . Parametre olarak iletilen dizede bulunan karakter sayısını döndürür.

Örnek 2. “Merhaba dünya!” satırındaki karakter sayısını sayalım.

String = "Merhaba dünya!"; NumberofCharacters = StrLength(String); Rapor(Karakter Sayısı);

Bu kodu çalıştırmanın sonucu, satırdaki karakter sayısının görüntülenmesi olacaktır: 11.

KısaltL

KısaltL(<Строка>) . Önemsiz karakterleri ilkinin soluna kırpar anlamlı sembolÇizgide.
Küçük karakterler:

  • uzay;
  • kırılmayan alan;
  • tablolama;
  • taşıma dönüşü;
  • satır beslemesi;
  • formun çevirisi (sayfa).

Örnek 3. "Dünya!" satırının sol tarafındaki tüm boşlukları kaldırın. ve buna “Merhaba” satırını ekleyin.

String = Kısaltma("dünya!"); String = "Merhaba"+Dize; Rapor(Dize);

Bu kodu çalıştırmanın sonucu ekranda “Merhaba dünya!” satırının görüntülenmesi olacaktır.

Kısaltılmış

Kısaltma(<Строка>) . Anlamlı olmayan karakterleri dizedeki ilk önemli karakterin sağına doğru kırpar.

Örnek 4. "Merhaba" ve "barış!" Satırlarından oluşan form "Merhaba dünya!"

Satır = Kısaltma("Merhaba ")+" "+ Kısaltma(" ​​dünya!"); Rapor(Dize);

Kısalt LP

KısaltLP(<Строка>) . Anlamlı olmayan karakterleri dizedeki ilk anlamlı karakterin sağından kırpar ve aynı zamanda anlamlı olmayan karakterleri dizedeki ilk anlamlı karakterin solundan kırpar. Bu işlev daha evrensel olduğu için önceki ikisinden daha sık kullanılır.

Örnek 5. Karşı tarafın adının sol ve sağındaki önemsiz karakterleri kaldırın.

Karşı Taraf = Dizinler.Ayrıntılara Göre Bul("TIN", "0777121211"); AccountObject = Account.GetObject(); CounterpartyObject.Name = AbbrLP(CounterpartyObject.Name); AccountObject.Write();

Aslan

Aslan(<Строка>, <ЧислоСимволов>) . Dizenin ilk karakterlerini alır, karakter sayısı parametrede belirtilir Karakter Sayısı.

Örnek 6. Yapıya izin verin Çalışançalışanın adını, soyadını ve soyadını içerir. Soyadı ve baş harfleri içeren bir dize alın.

NameInitial = Lev(Çalışan.Adı, 1); Patronimik Başlangıç ​​= Leo(Çalışan. Patronimik, 1); FullName = Çalışan.Soyadı + " " + Adının Baş Harfi + "."

+ Orta Harf + ".";

Sağ<Строка>, <ЧислоСимволов>) Sağ( Karakter Sayısı.. Bir dizenin son karakterlerini, parametrede belirtilen karakter sayısını alır

Belirtilen karakter sayısı dizenin uzunluğunu aşarsa dizenin tamamı döndürülür. Örnek 7. Bir string değişkeninin sonuna “yyyyaagg” formatında bir tarih yazalım, tarihi içeren bir string elde edelim ve onu yazıya dönüştürelim..

Tarih Dize = " Güncel tarih

: 20170910"; StringDate = Rights(String, 8); Date = Date(StringDate);

Çarşamba<Строка>, <НачальныйНомер>, <ЧислоСимволов>) Çarşamba( Astar. Parametre olarak iletilen dizeden bir alt dize alır parametrede numarası belirtilen karakterden başlayarakİlk Numara Karakter Sayısı. ve parametreye aktarılan uzunluk parametrede numarası belirtilen karakterden başlayarak Bir satırdaki karakterlerin numaralandırması 1'den başlar. Parametrede ise sıfırdan küçük veya sıfıra eşit bir değer belirtilirse parametre 1 değerini alır. Karakter Sayısı

belirtilmezse satırın sonuna kadar olan karakterler seçilir.

Örnek 8. Dokuzuncu pozisyondan başlayan string değişkeni bölge kodunu içersin, onu alıp ayrı bir satıra yazmalısınız.

String = "Bölge: 99 Moskova"; Bölge = Ort(Dize, 9, 2);

Sayfa Bul<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) StrFind(

  • Astar. Bir dizede belirtilen bir alt dizeyi arar ve bulunan alt dizenin ilk karakterinin konum numarasını döndürür. Bu fonksiyonun parametrelerine bakalım:
  • . Kaynak dizesi; Alt Dizeyi Ara
  • . Arama alt dizesi; Arama Yönü
    • Arama Yönü.Başlangıçtan itibaren;
    • Arama.Bitiş Yönü;
  • Başlangıç ​​Konumu. Aramanın başladığı dizedeki konumu belirtir;
  • SayıOluşumlar. Kaynak dizede aranan alt dizenin oluşum numarasını belirtir.

Örnek 9. “Merhaba dünya!” "Ve" karakterinin son geçtiği konumu belirleyin.

PositionNumber = StrFind("Merhaba dünya!", "ve", Arama Yönü.End); Rapor(KonumNumarası);

Bu kodu çalıştırmanın sonucu, “ve” sembolünün en son geçtiği sayıyı görüntülemek olacaktır: 9.

VReg

VReg(<Строка>) . 1s8'de belirtilen dizedeki tüm karakterleri büyük harfe dönüştürür.

Örnek 10: "Merhaba dünya!" dizesini dönüştürün. büyük harfe.

StringVreg = VReg("Merhaba Dünya!"); Rapor(StringVreg);

Bu kodun çalıştırılmasının sonucunda “MERHABA DÜNYA!” satırı görüntülenecektir.

NReg

NReg(<Строка>) . 1s8'de belirtilen dizedeki tüm karakterleri küçük harfe dönüştürür.

Örnek 11: "MERHABA DÜNYA!" dizesini dönüştürün. küçük harfe.

StringNreg = NReg("MERHABA DÜNYA!"); Rapor(StringVreg);

Bu kodu çalıştırmanın sonucunda “merhaba dünya!” satırı görüntülenecektir.

Treg

TReg(<Строка>) . Bir dizeyi şu şekilde dönüştürür: Her kelimenin ilk karakteri büyük harfe, kelimenin geri kalan karakterleri küçük harfe dönüştürülür.

Örnek 12: “Merhaba dünya!” satırındaki kelimelerin ilk harflerini büyük yapın.

StringTreg = TReg("Merhaba Dünya!"); Rapor(StringTreg);

Bu kodu çalıştırmanın sonucunda “Merhaba Dünya!” satırı görüntülenecektir.

Sembol

Sembol(<КодСимвола>) . Bir karakteri Unicod koduna göre alır.

Örnek 13. “Merhaba Dünya!” satırına sol ve sağı ekleyin. sembol ★

StringWithStars = Sembol("9733")+"Merhaba Dünya!"+Symbol("9733"); Rapor(StringWithStars);

Bu kodu çalıştırmanın sonucunda “★Merhaba Dünya!★” satırı görüntülenecektir.

Sembol Kodu

SembolKodu(<Строка>, <НомерСимвола>) . İkinci parametrede belirtilen konumda bulunan, birinci parametrede belirtilen dizeden Unicode karakter kodunu alır.

Örnek 14. “Merhaba Dünya!” Satırındaki son karakterin kodunu bulun.

String = "Merhaba Dünya!"; CharacterCode = CharacterCode(String, StrLength(String)); Bildir(KarakterKodu);

Bu kodun çalıştırılmasının sonucu, “!” sembol kodunun görüntülenmesi olacaktır. - 33.

BoşDize

EmptyString(<Строка>) . Dizenin yalnızca önemsiz karakterlerden oluşup oluşmadığını, yani boş olup olmadığını kontrol eder.

Örnek 15. Üç boşluktan oluşan bir dizenin boş olup olmadığını kontrol edin.

Boş = EmptyString(" "); Rapor(Boş);

Bu kodu çalıştırmanın sonucu, "Evet" kelimesinin (mantıksal bir değerin dize ifadesi) görüntülenmesi olacaktır. Doğru).

SayfaDeğiştir

StrDeğiştir(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Kaynak dizede arama alt dizesinin tüm oluşumlarını bulur ve onu değiştirilen alt dizeyle değiştirir.

Örnek 16. “Merhaba Dünya!” “Barış” sözcüğünü “Arkadaşlar” sözcüğüyle değiştirin.

String = StrReplace("Merhaba Dünya!", "Dünya", "Arkadaşlar"); Rapor(Dize);

Bu kodu çalıştırmanın sonucunda “Merhaba Arkadaşlar!” satırı görüntülenecektir.

StrNumberLines

StrNumberRow(<Строка>) . Çok satırlı bir dizedeki satır sayısını saymanızı sağlar. Gitmek için yeni hat 1s 8'de sembol kullanılır PS(yeni satır karakteri).

Örnek 17. Metindeki satır sayısını belirleyin:
"İlk satır
İkinci satır
Üçüncü satır"

Number = StrNumberString("İlk satır"+Characters.PS +"İkinci satır"+Symbols.PS +"Üçüncü satır"); Rapor(Sayı);

Bu kodu çalıştırmanın sonucu, metindeki satır sayısının görüntülenmesi olacaktır: 3

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . Çok satırlı bir dizedeki bir satırı numarasına göre alır. Satır numaralandırması 1'den başlar.

Örnek 18. Al son satır metinde:
"İlk satır
İkinci satır
Üçüncü satır"

Metin = "İlk satır" + Semboller. PS + "İkinci satır" + Semboller. PS + "Üçüncü satır"; LastRow = StrGetRow(Text, StrNumberLines(Text)); Rapor(SonSatır);

Bu kodu çalıştırmanın sonucu “Üçüncü Satır” satırının görüntülenmesi olacaktır.

Sayfa NumarasıOluşum Sayısı

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) . Belirtilen alt dizenin bir dizedeki oluşum sayısını döndürür. İşlev büyük/küçük harfe duyarlıdır.

Örnek 19. “1s 8.3 ve 8.2'deki satırlar” satırında büyük/küçük harfe bakılmaksızın “c” harfinin kaç kez geçtiğini belirleyin.

Satır = "1s 8.3 ve 8.2'deki satırlar"; NumberOccurrences = StrNumberOccurrences(Vreg(String), "C"); Rapor(Oluşum Sayısı);

Bu kodu çalıştırmanın sonucu, oluşum sayısının görüntülenmesi olacaktır: 2.

PageStartsWith

StrStartsWith(<Строка>, <СтрокаПоиска>) . İlk parametrede iletilen dizenin ikinci parametredeki dizeyle başlayıp başlamadığını kontrol eder.

Örnek 20. Seçilen karşı tarafın TIN'sinin 1 rakamıyla başlayıp başlamadığını belirleyin. Değişkeni girin Karşı taraf Karşı taraflar.

TIN = Karşı Taraf.TIN; StartsUNits = StrStartsWith(TIN, "1"); If Birimlerle Başlıyor Then //Kodunuz EndIf;

Sayfa Bitiş Tarihi

StrEndsWith(<Строка>, <СтрокаПоиска>) . İlk parametrede iletilen dizenin ikinci parametredeki dizeyle bitip bitmediğini kontrol eder.

Örnek 21. Seçilen karşı tarafın TIN'sinin 2 rakamıyla bitip bitmediğini belirleyin. Değişkeni girin Karşı taraf bir dizin öğesine referans saklanır Karşı taraflar.

TIN = Karşı Taraf.TIN; EndsWithTwo = StrEndsWith(TIN, "2"); If EndsInTwo Then //Kodunuz EndIf;

Sayfa Bölünmesi

StrDivide(<Строка>, <Разделитель>, <ВключатьПустые>) . Belirtilen sınırlayıcı karakterleri kullanarak bir dizeyi parçalara böler ve elde edilen dizeleri bir diziye yazar. İlk parametre kaynak dizeyi saklar, ikincisi ayırıcıyı içeren dizeyi, üçüncüsü ise diziye yazılması gerekip gerekmediğini belirtir. boş satırlar(varsayılan Doğru).

Örnek 22. “;” sembolüyle ayrılmış sayılar içeren bir dizimiz olsun, dizeden bir sayı dizisi elde edelim.

Dize = "1; 2; 3"; Array = StrDivide(String, ";"); Sayım için = 0 By Array.Quantity() - 1 Döngü Denemesi Array[Count] = Number(AbbrLP(Array[Count]));

İstisna Dizisi[Sch] = 0;

EndAttemptsEndCycle;

Uygulama sonucunda 1'den 3'e kadar sayıların yer aldığı bir dizi elde edilecektir.<Строки>, <Разделитель>) Sayfa Bağlantısı

StrConnect(

. Dize dizisini, ilk parametreden, ikinci parametrede belirtilen sınırlayıcıyla ayrılmış dizinin tüm öğelerini içeren bir dizeye dönüştürür.

Örnek 23. Önceki örnekteki sayı dizisini kullanarak orijinal dizeyi alın.

Hesap İçin = 0 By Array.Quantity() - 1 Cycle Array[Act] = String(Array[Act]); EndCycle; Satır = StrConnect(Array, "; ");

BÖLÜM 1. YÖNTEMLER (26).

1.1. Temel yöntemler (10). Bağımsız, kendi basit algoritmaları üzerine inşa edilmiş.

Page_Add() (belirtilen karakterlerle sağ-sol ekleme).

Page_Inverse () (ters çevirme - sağdan sola karakterler).

Page_Codes() (”” aracılığıyla karakter kodları ve kodları içeren bir dizi)

Page_Characters() (”” ile ayrılmış bir kod dizisi veya kod içeren bir diziden)

Page_ReplaceSymbols() (bazı karakterleri diğerleriyle değiştirmek).

String_FromArray() (bir ayırıcıyla ayrılmış parça dizisinden gelen dize)

Page_FindIn() (belirtilen oluşum numarasına sahip bir alt dizeyi arayın (sağdaki dahil). Page_FindGr() (Belirtilen karakter setinde yer alan bir karakter grubunu arayın) Page_FindNumber() (Sağdaki dahil olmak üzere bir numara arayın.

belirtilen sayı

olaylar)

Page_Interpret() (yerleşik sözdizimine göre bir diziye)

1.2. Türev yöntemler (12). Aslında bu, dört genelleştirilmiş algoritma yönteminin kullanımıdır (bkz. Bölüm 2)

Page_Number() (satırın başından ve sonundan itibaren sayısal olmayan karakterlerden “korkmayın”.

Page_Find() (belirtilen oluşum numarasına sahip bir alt dizeyi arayın (büyük/küçük harfe duyarlı olmayan ve sağdaki dahil).

Page_Replace() (arama (büyük/küçük harfe duyarlı olmayan ve sağ el dahil) ve sınırlayıcı alt dizelerini değiştirin).

String_Piece() (sınırlayıcının belirtilen oluşumları arasındaki bir dize parçası (sol veya sağ)).

Page_ReplacePiece() (kaynak dizedeki "yığın"ı belirtilen dizeyle değiştirir).

Page_MoveByWords() (“Yumuşakça” alt dizelerine bölünmüş)

Page_Cut() (Belirtilen uzunluktaki alt dizilere “kes”)

Str_Shorten() (soldaki "kısaltılmış" karakter grubunu "yedek dize" ile değiştirin

Page_Abbreviation() (sağdaki "küçültülmüş" karakter grubunu "değiştirme dizesi" ile değiştirin

Str_ShortenS() (“kısaltılmış” karakter grubunun ortasını “yedek dize” ile değiştirin

Page_Extend (belirtilen karakter sayısını artırarak belirli bir uzunluğa genişletme)

1.3. Ayrıntılı yöntemler (3). Ayrıntılı bilgi içeren bir tabloya aktarılarak bir satırın "kesilmesi".

Page_vTableIn() (iç içe sınırlayıcılar sistemine göre tabloya).

Page_vTableGr (çok seviyeli filtreye göre tabloya).

Page_inTableNumbers (aralarında sayılar ve parçalar bulunan bir tabloda).

BÖLÜM 2. GENELLEŞTİRİLMİŞ YÖNTEMLER-ALGORİMLER (3).

Page_Occurrence() (“Bul” ve “Değiştir” yöntemleri).

Page_Fragments() (yöntemler “Piece”,”ReplacePiece,”InArray”,”inTableIn”).

Page_Abcr() ("AbcrL", "AbcrP", "AbcrS", "Genişlet" yöntemleri.

Page_Split() (“Hecelere Göre Taşı”, “Kelimelere Göre Taşı”, “Kes”) yöntemleri.

BÖLÜM 3. EVRENSEL İŞLEV.

Bu, izin veren bir tür koşullu programlama arayüzüdür.

bir dizeye aynı anda birkaç yöntem uygulayın. Olarak uygulandı

yedi parametreli işlevler ("Demo" bu işlev üzerine kurulmuştur):

Sayfa_(Yöntemler, Alt Yöntemler, Giriş, Param1, Param2, Uzunluk_Number_Konum, Ek Çıkış)

Parametreler:

- “Yöntemler” - birkaç “birleşik” ve/veya bir “özel” yöntem

(tek karakterli kodlar veya adlar, "," aracılığıyla mümkündür)

- “Alt yöntemler” - birkaç “birleşik” ve/veya “özel” seçenek

“özel” yöntem (tek karakterli kodlar veya adlar);

- “Giriş” - Dizge veya Dizi veya Değer Tablosu;

- “Param1” - arama dizesi, ikameler, ayırıcılar, filtreler;

- “Param2” - yedek dize veya karakterler;

- “Length_Number_Position” -Number, Numbers'ı bir ayırıcı veya Numbers'lı bir dizi aracılığıyla;

- “Ek Çıkış” - Sayı veya Dize veya Dizi veya Değer Tablosu;

Alt yöntemlerin adları ve/veya tek karakterli kodları ve ayrıca

(Length_Number_Position) her durumda olabilir ve ayrılabilir

aşağıdaki sınırlayıcılardan herhangi biri: ”, :;”.

BÖLÜM 4. BAZI ÖRNEKLER.

There areNumbersInLine=(Str_FindNumber(InLine)<>Tanımlanmamış);

Satırda Sayılar Var = (String_FindGr(Inline,"+0123456789")>0);

Latin = (Str_FindGr(InStr, Str_Interpret("lL"))>0);

Belirtilen İşaretler Vardır = (Str_NfindGr(VxStr, "+to rogYu.0p9")>0);

IsNonPrinted=(Str_FindGr(VxStr, Line_Interpret("-l-L-r-R-P-Z-C"))>0);

BÖLÜM 5. SONUÇ.

Mümkün olduğunda hat boyunca tek geçişle yetindim. İkinci geçiş genellikle parçalar halindedir. Yerleşik StrNumberOccurrences() fonksiyonunu kullanmadım.

Yerleşik işlevler kullanılır: Left(), Right(), Middle(), StrLength()

- (hattın konumlandırılması ve bir kısmının alınması “hızlı” olmalıdır).

8.3.6.1977 sürümünde uygulandı.

Dizelerle çalışmak üzere tasarlanmış işlevler kümesini genişlettik. Bunu size dize verilerini ayrıştırmaya yönelik daha gelişmiş araçlar sunmak için yaptık. Yeni işlevler, metin analizinin teknolojik görevlerinde kullanışlı ve faydalı olacaktır. Biçimlendirilmiş biçimde veri içeren metnin ayrıştırılmasıyla ilgili görevlerde. Bu, ekipmandan alınan bazı dosyaların analizi veya örneğin teknolojik bir günlüğün analizi olabilir.

Daha önce yeni işlevler gerçekleştiren tüm eylemleri gerçekleştirebiliyordunuz. Yerleşik bir dilde yazılmış az çok karmaşık algoritmalar kullanmak. Bu nedenle, yeni işlevler size temelde yeni yetenekler sağlamaz. Ancak kod miktarını azaltmanıza ve kodu daha basit ve anlaşılır hale getirmenize olanak tanırlar. Ek olarak, eylemlerin yürütülmesini hızlandırmanıza da olanak tanır. Çünkü platformda uygulanan işlevler elbette yerleşik bir dilde yazılmış benzer bir algoritmadan daha hızlı çalışıyor.

Biçimlendirme işlevi StrTemplate()

Bu işlev, parametreleri bir dizeye dönüştürür. Böyle bir dönüşüme duyulan ihtiyaç, örneğin uyarı mesajları görüntülenirken sıklıkla ortaya çıkar. Bu işlevin sözdizimi aşağıdaki gibidir:

StrTemplate(<Шаблон>, <Значение1-Значение10>)

<Шаблон>- bu, parametre gösterimlerini değiştirmeniz gereken dizedir.

<Значение1> , ... <Значение10>- bunlar, temsillerinin dizede değiştirilmesi gereken parametrelerdir (en fazla on).

Değiştirmeyi gerçekleştirmek istediğiniz şablonda belirli bir yeri belirtmek için %1, ... %10 gibi işaretçiler kullanmanız gerekir. Şablonda yer alan işaretçilerin sayısı ile değerleri içeren parametrelerin sayısı eşleşmelidir.

Örneğin, böyle bir operatörün yürütülmesinin sonucu:

bir satır olacak:

2. satırda veri hatası (Tarih türü gerekli)

Dizelerle çalışma işlevi StrCompare()

Bu işlev, iki dizeyi büyük/küçük harfe duyarlı olmayan bir şekilde karşılaştırır. Örneğin şöyle:

Aynı eylemi daha önce Değer Karşılaştırma nesnesini kullanarak gerçekleştirebilirsiniz:

Ancak yeni özelliği kullanmak daha kolay görünüyor. Bunun yanı sıra işlev, Değer Karşılaştırma nesnesinden farklı olarak hem ince istemcide hem de web istemcisinde çalışır.

StrStartsWith(), StrEndsAt() dizeleriyle çalışmaya yönelik işlevler

Bu işlevler, bir dizenin belirli bir alt dizeyle başlayıp başlamadığını veya bir dizenin belirli bir alt dizeyle bitip bitmediğini belirler. Bu işlevlere yönelik algoritmanın gömülü bir dilde uygulanması zor değildir, ancak bunların varlığı daha temiz ve anlaşılır kod yazmanıza olanak tanır. Ve daha hızlı çalışırlar.

Örneğin, If deyiminde kullanılmaya uygundurlar:

StrDivide(), StrConnect() dizeleriyle çalışmaya yönelik işlevler

Bu işlevler, belirtilen sınırlayıcıyı kullanarak bir dizeyi parçalara ayırır. Veya tam tersi, seçilen ayırıcıyı aralarına yerleştirerek birkaç satırı tek bir satırda birleştirirler. Günlükleri ve teknolojik günlükleri oluşturmak veya analiz etmek için uygundurlar. Örneğin, teknolojik bir günlük girişini daha ileri analiz için uygun parçalara kolayca ayrıştırabilirsiniz:

Dizelerle çalışma işlevi StrFind()

Eski Find() işlevi yerine, uyguladık yeni özellik ek özelliklere sahip olan:

  • Farklı yönlerde arama yapın (baştan sona);
  • Belirtilen konumdan arama yapın;
  • Belirtilen sayıda (ikinci, üçüncü vb.) bir oluşumu arayın.

Aslında eski işlevin yeteneklerini kopyalıyor. Bu, eski sürümlerde derlenen modüllerle uyumluluğu korumak için yapılır. Artık eski Find() işlevini kullanmamanız önerilir.

Aşağıda yeni arama yeteneklerinin kullanıldığı bir örnek verilmiştir. Tersine arama, resmileştirilmiş bir dizenin son parçasına ihtiyaç duyduğunuzda kullanışlıdır; örneğin, Ad Soyad URL'deki dosya. Ve belirli bir konumdan arama yapmak, satırın tamamında değil, bilinen bir parçada arama yapmanız gereken durumlarda yardımcı olur.

Aynanın İçinden Notlar

18.08.2014 Dizelerle çalışmak için yeni işlevler

8.3.6.1977 sürümünde uygulandı.

Dizelerle çalışmak üzere tasarlanmış işlevler kümesini genişlettik. Bunu size dize verilerini ayrıştırmaya yönelik daha gelişmiş araçlar sunmak için yaptık. Yeni işlevler, metin analizinin teknolojik görevlerinde kullanışlı ve faydalı olacaktır. Biçimlendirilmiş biçimde veri içeren metnin ayrıştırılmasıyla ilgili görevlerde. Bu, ekipmandan alınan bazı dosyaların analizi veya örneğin teknolojik bir günlüğün analizi olabilir.

Daha önce yeni işlevler gerçekleştiren tüm eylemleri gerçekleştirebiliyordunuz. Yerleşik bir dilde yazılmış az çok karmaşık algoritmalar kullanmak. Bu nedenle, yeni işlevler size temelde yeni yetenekler sağlamaz. Ancak kod miktarını azaltmanıza ve kodu daha basit ve anlaşılır hale getirmenize olanak tanırlar. Ek olarak, eylemlerin yürütülmesini hızlandırmanıza da olanak tanır. Çünkü platformda uygulanan işlevler elbette yerleşik bir dilde yazılmış benzer bir algoritmadan daha hızlı çalışıyor.

Biçimlendirme işlevi StrTemplate()

Bu işlev, parametreleri bir dizeye dönüştürür. Böyle bir dönüşüme duyulan ihtiyaç, örneğin uyarı mesajları görüntülenirken sıklıkla ortaya çıkar. Bu işlevin sözdizimi aşağıdaki gibidir:

StrTemplate(<Шаблон>, <Значение1-Значение10>)

<Шаблон>- bu, parametre gösterimlerini değiştirmeniz gereken dizedir.

<Значение1> , ... <Значение10>- bunlar, temsillerinin dizede değiştirilmesi gereken parametrelerdir (en fazla on).

Değiştirmeyi gerçekleştirmek istediğiniz şablonda belirli bir yeri belirtmek için %1, ... %10 gibi işaretçiler kullanmanız gerekir. Şablonda yer alan işaretçilerin sayısı ile değerleri içeren parametrelerin sayısı eşleşmelidir.

Örneğin, böyle bir operatörün yürütülmesinin sonucu:

bir satır olacak:

2. satırda veri hatası (Tarih türü gerekli)

Dizelerle çalışma işlevi StrCompare()

Bu işlev, iki dizeyi büyük/küçük harfe duyarlı olmayan bir şekilde karşılaştırır. Örneğin şöyle:

Aynı eylemi daha önce nesneyi kullanarak gerçekleştirebilirsiniz. Değerlerin Karşılaştırılması:

Ancak yeni özelliği kullanmak daha kolay görünüyor. Ve bunun yanı sıra, bir nesnenin aksine bir işlev Değerlerin Karşılaştırılması, hem ince istemcide hem de web istemcisinde çalışır.

StrStartsWith(), StrEndsAt() dizeleriyle çalışmaya yönelik işlevler

Bu işlevler, bir dizenin belirli bir alt dizeyle başlayıp başlamadığını veya bir dizenin belirli bir alt dizeyle bitip bitmediğini belirler. Bu işlevlere yönelik algoritmanın gömülü bir dilde uygulanması zor değildir, ancak bunların varlığı daha temiz ve anlaşılır kod yazmanıza olanak tanır. Ve daha hızlı çalışırlar.

Örneğin, bunları operatörde kullanmak uygundur Eğer:

StrDivide(), StrConnect() dizeleriyle çalışmaya yönelik işlevler

Bu işlevler, belirtilen sınırlayıcıyı kullanarak bir dizeyi parçalara ayırır. Veya tam tersi, seçilen ayırıcıyı aralarına yerleştirerek birkaç satırı tek bir satırda birleştirirler. Günlükleri ve teknolojik günlükleri oluşturmak veya analiz etmek için uygundurlar. Örneğin, teknolojik bir günlük girişini daha ileri analiz için uygun parçalara kolayca ayrıştırabilirsiniz:

Dizelerle çalışma işlevi StrFind()

Eski fonksiyon yerine Bulmak() Ek yeteneklere sahip yeni bir işlevi hayata geçirdik:

  • Farklı yönlerde arama yapın (baştan sona);
  • Belirtilen konumdan arama yapın;
  • Belirtilen sayıda (ikinci, üçüncü vb.) bir oluşumu arayın.

Aslında eski işlevin yeteneklerini kopyalıyor. Bu, eski sürümlerde derlenen modüllerle uyumluluğu korumak için yapılır. Eski işlev Bulmak() Bir daha kullanılmaması tavsiye edilir.

Aşağıda yeni arama yeteneklerinin kullanıldığı bir örnek verilmiştir. Tersine arama, bir URL'deki tam dosya adı gibi resmileştirilmiş bir dizenin son kısmına ihtiyaç duyduğunuzda kullanışlıdır. Ve belirli bir konumdan arama yapmak, satırın tamamında değil, bilinen bir parçada arama yapmanızın gerektiği durumlarda yardımcı olur.