1s 8.2 หมายเลขซีเรียลของอักขระในบรรทัด ฟังก์ชั่นใหม่สำหรับการทำงานกับสตริง ฟังก์ชันการจัดรูปแบบ StrTemplate()

ส่วนที่ 1 วิธีการ (26)

1.1. วิธีการพื้นฐาน (10) เป็นอิสระ สร้างขึ้นจากอัลกอริธึมง่ายๆ ของตัวเอง

Page_Add() (การบวกซ้ายขวาพร้อมอักขระที่ระบุ)

Page_Inverse () (ผกผัน - อักขระจากขวาไปซ้าย)

Page_Codes() (รหัสอักขระถึง ”,” และอาร์เรย์ที่มีรหัส)

Page_Characters() (สตริงของโค้ดที่คั่นด้วย ”,” หรือจากอาร์เรย์ที่มีโค้ด)

Page_ReplaceSymbols() (แทนที่อักขระบางตัวด้วยอักขระอื่น)

String_FromArray() (สตริงจากอาร์เรย์ของแฟรกเมนต์ที่คั่นด้วยตัวคั่น)

Page_FindIn() (ค้นหาสตริงย่อย (รวมถึงทางด้านขวา) ด้วยหมายเลขรายการที่ระบุ)

Page_FindGr() (ค้นหากลุ่มอักขระที่รวมอยู่ในชุดอักขระที่ระบุ)

Page_FindNumber() (ค้นหาตัวเลขรวมถึงทางด้านขวาด้วย หมายเลขที่ระบุเกิดขึ้น)

Page_Interpret() (เป็นอาร์เรย์ตามไวยากรณ์ที่กำหนด)

1.2. วิธีการอนุพันธ์ (12) จริงๆ แล้ว นี่คือการใช้วิธีอัลกอริธึมทั่วไปสี่วิธี (ดูส่วนที่ 2)

Page_Number() (ตั้งแต่ต้นและท้ายบรรทัด อย่า “กลัว” อักขระที่ไม่ใช่ตัวเลข

Page_Find() (ค้นหาสตริงย่อย (รวมถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ทางด้านขวา) ด้วยหมายเลขเหตุการณ์ที่ระบุ)

Page_Replace() (ค้นหา (รวมทั้งไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) และแทนที่สตริงย่อยของตัวคั่น)

String_ Piece() (ส่วนของสตริงระหว่างเหตุการณ์ที่ระบุของตัวคั่น (ซ้ายหรือขวา))

Page_Replace Piece() (แทนที่ “chunk” ในสตริงต้นฉบับด้วยสตริงที่ระบุ)

Page_ВArray() (ระหว่างรายการที่ระบุของตัวคั่น (รวมถึงรายการทางด้านขวาและไม่มีตัวพิมพ์)

Page_TransferBySyllables() (แยกออกเป็นสตริงย่อย “Hardly” โดยมีเครื่องหมายยัติภังค์)

Page_MoveByWords() (แยกออกเป็นสตริงย่อย “เบาๆ”)

Page_Cut() (“ตัด” เป็นสตริงย่อยตามความยาวที่กำหนด)

Str_Shorten() (แทนที่กลุ่มด้านซ้ายของอักขระ "ตัวย่อ" ด้วย "สตริงการแทนที่"

Page_Abbreviation() (แทนที่กลุ่มด้านขวาของอักขระ “reduced” ด้วย “สตริงการแทนที่”

Str_ShortenS() (แทนที่ตรงกลางกลุ่มอักขระ "แบบสั้น" ด้วย "สตริงการแทนที่"

Page_Extend (ขยายเป็นความยาวที่กำหนดโดยการเพิ่มจำนวนอักขระที่ระบุ)

1.3. วิธีการโดยละเอียด (3) "ผ่า" บรรทัดพร้อมถ่ายโอนไปยังตารางพร้อมข้อมูลโดยละเอียด

Page_vTableIn() (ลงในตารางตามระบบของตัวคั่นที่ซ้อนกัน)

Page_vTableGr (ไปยังตารางตามตัวกรองหลายระดับ)

Page_inTableNumbers (ในตารางที่มีตัวเลขและแฟรกเมนต์อยู่ระหว่างกัน)

ส่วนที่ 2 วิธีการทั่วไป-อัลกอริทึม (3)

Page_Occurrence() (วิธีการ “ค้นหา” และ “แทนที่”)

Page_Fragments() (วิธีการ "ชิ้นส่วน", "แทนที่ชิ้นส่วน," InArray", "inTableIn")

Page_Abcr() (วิธีการ "AbcrL", "AbcrP", "AbcrS", "ขยาย"

Page_Split() (วิธีการ "ย้ายตามพยางค์" "ย้ายตามคำ" "ตัด")

ส่วนที่ 3 ฟังก์ชั่นสากล

นี่คืออินเทอร์เฟซการเขียนโปรแกรมแบบมีเงื่อนไขที่อนุญาต

ใช้หลายวิธีกับสตริงพร้อมกัน ดำเนินการเป็น

ฟังก์ชั่นที่มีเจ็ดพารามิเตอร์ ("สาธิต" สร้างขึ้นจากฟังก์ชั่นนี้):

Page_(วิธีการ, วิธีการย่อย, อินพุต, Param1, Param2, ความยาว_Number_Position, เอาต์พุตเพิ่มเติม)

ตัวเลือก:

- "วิธีการ" - หลายวิธี "รวม" และ (หรือ) วิธี "พิเศษ" หนึ่งวิธี

(รหัสหรือชื่ออักขระตัวเดียว สามารถทำได้ผ่าน ",")

- "วิธีการย่อย" - ตัวเลือก "รวม" และ (หรือ) "พิเศษ" หลายรายการ

วิธีการ “พิเศษ” (รหัสหรือชื่ออักขระเดียว);

- “อินพุต” - สตริง หรืออาร์เรย์ หรือตารางค่า

- “Param1” - สตริงการค้นหา, การทดแทน, ตัวคั่น, ตัวกรอง;

- “Param2” - สตริงหรืออักขระทดแทน

- “Length_Number_Position” -ตัวเลข ตัวเลขผ่านตัวคั่นหรืออาร์เรย์ที่มีตัวเลข

- “เอาต์พุตเพิ่มเติม” - ตัวเลขหรือสตริงหรืออาร์เรย์หรือตารางค่า

ชื่อและ/หรือรหัสหนึ่งอักขระของวิธีการย่อย รวมถึงตัวเลขใน

(Length_Number_Position) ได้ทุกกรณีและแยกออกจากกัน

ตัวคั่นใด ๆ ต่อไปนี้: ”, :;”

ตอนที่ 4 ตัวอย่างบางส่วน

มี areNumbersInLine=(Str_FindNumber(InLine)<>ไม่ได้กำหนด);

มีตัวเลขอยู่ในบรรทัด = (String_FindGr(Inline,"+0123456789")>0);

มีภาษาละติน = (Str_FindGr(InStr, Str_Interpret("lL"))>0);

มีสัญญาณที่ระบุ = (Str_NfindGr(VxStr, "+to rogYu.0p9")>0);

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

ส่วนที่ 5 บทสรุป

หากเป็นไปได้ ฉันทำได้ด้วยการจ่ายครั้งเดียวตามเส้น การส่งผ่านครั้งที่สองมักจะแยกเป็นชิ้นๆ ฉันไม่ได้ใช้ฟังก์ชัน StrNumberOccurrences() ในตัว

มีการใช้ฟังก์ชันในตัว: Left(), Right(), Middle(), StrLength()

- (การวางตำแหน่งและรับส่วนของเส้นจะต้อง "รวดเร็ว")

มีกลไกบางอย่างในการทำงานกับสตริงในการสืบค้น 1C ขั้นแรก สามารถเพิ่มบรรทัดได้ ประการที่สอง คุณสามารถใช้สตริงย่อยจากสตริงได้ ประการที่สาม สามารถเปรียบเทียบสตริงได้ รวมถึงตามรูปแบบด้วย นั่นอาจเป็นทั้งหมดที่สามารถทำได้ด้วยสตริง

การเพิ่มสตริง

หากต้องการเพิ่มแถวในการสืบค้น จะใช้การดำเนินการ "+" คุณสามารถเพิ่มได้เฉพาะสตริงที่มีความยาวจำกัดเท่านั้น

เลือก "ชื่อ: " + คู่สัญญา ตั้งชื่อ AS คอลัมน์ 1 จากไดเรกทอรี คู่สัญญา AS คู่สัญญา WHERE คู่สัญญา ลิงก์ = &ลิงก์

ฟังก์ชันสตริงย่อย

สตริงย่อย(<Строка>, <НачальнаяПозиция>, <Длина>)

อะนาล็อกของฟังก์ชัน Environment() จากโมเดลออบเจ็กต์ สามารถใช้ฟังก์ชัน Substring() กับข้อมูลสตริงและอนุญาตให้คุณเลือกส่วนย่อยได้ <Строки> เริ่มต้นด้วยหมายเลขตัวอักษร <НачальнаяПозиция> (อักขระในบรรทัดจะมีหมายเลขเริ่มต้นจาก 1) และความยาว <Длина> ตัวอักษร ผลลัพธ์ของการคำนวณฟังก์ชันมีประเภทสตริงที่มีความยาวผันแปรได้ และความยาวจะถือว่าไม่จำกัดหาก <Строка> มีความยาวและพารามิเตอร์ไม่จำกัด <Длина> ไม่เป็นค่าคงที่หรือมากกว่า 1024

หากความยาวของสตริงน้อยกว่าที่ระบุในพารามิเตอร์ตัวที่สอง ฟังก์ชันจะส่งกลับสตริงว่าง

ความสนใจ!ไม่แนะนำให้ใช้ฟังก์ชัน SUBSTRING() เพื่อแปลงสตริงที่มีความยาวไม่จำกัดเป็นสตริงที่มีความยาวจำกัด ควรใช้ตัวดำเนินการคาสต์ EXPRESS() แทน

ฟังก์ชั่นที่คล้ายกัน

หากเราต้องการให้แน่ใจว่าแอตทริบิวต์สตริงตรงตามเกณฑ์ที่กำหนด เราจะเปรียบเทียบ:

เลือกคู่สัญญา ตั้งชื่อ AS คอลัมน์ 1 จากไดเรกทอรี คู่สัญญา AS คู่สัญญา WHERE คู่สัญญา ชื่อ = "Gazprom"

แต่ถ้าคุณต้องการการเปรียบเทียบที่ละเอียดกว่านี้ล่ะ? ไม่ใช่แค่ความเสมอภาคหรือความไม่เท่าเทียมกันเท่านั้น แต่ยังมีความคล้ายคลึงกับรูปแบบบางอย่างด้วย? นี่คือสิ่งที่ฟังก์ชัน SIMILAR ถูกสร้างขึ้นมาเพื่อสิ่งนี้

LIKE - ตัวดำเนินการสำหรับตรวจสอบสตริงเพื่อความคล้ายคลึงกับรูปแบบ อะนาล็อกของ LIKE ใน SQL

ตัวดำเนินการ SIMILAR ช่วยให้คุณสามารถเปรียบเทียบค่าของนิพจน์ที่ระบุทางด้านซ้ายกับสตริงรูปแบบที่ระบุทางด้านขวา ค่าของนิพจน์ต้องเป็นประเภทสตริง หากค่าของนิพจน์ตรงกับรูปแบบ ผลลัพธ์ของตัวดำเนินการจะเป็น TRUE มิฉะนั้นจะเป็น FALSE

อักขระต่อไปนี้ในสตริงเทมเพลตคืออักขระบริการและมีความหมายแตกต่างจากอักขระสตริง:

  • % (เปอร์เซ็นต์): ลำดับที่มีอักขระตามจำนวนเท่าใดก็ได้
  • _ (ขีดล่าง): อักขระหนึ่งตัว;
  • […] (วี วงเล็บเหลี่ยมอักขระหนึ่งตัวขึ้นไป): อักขระเดี่ยวใด ๆ ที่อยู่ในวงเล็บเหลี่ยม การแจงนับอาจมีช่วง เช่น a-z ซึ่งหมายถึงอักขระใดๆ ที่รวมอยู่ในช่วง รวมถึงจุดสิ้นสุดของช่วงด้วย
  • [^...] (ในวงเล็บเหลี่ยม เครื่องหมายลบตามด้วยอักขระหนึ่งตัวขึ้นไป): อักขระเดี่ยวใดๆ นอกเหนือจากที่แสดงอยู่หลังเครื่องหมายปฏิเสธ

สัญลักษณ์อื่นใดหมายถึงตัวมันเองและไม่มีภาระเพิ่มเติมใดๆ หากอักขระตัวใดตัวหนึ่งในรายการจำเป็นต้องเขียนด้วยตัวมันเอง จะต้องนำหน้าด้วย<Спецсимвол>. ตัวฉันเอง<Спецсимвол>(สัญลักษณ์ใด ๆ ที่เหมาะสม) ถูกกำหนดไว้ในข้อความเดียวกันหลังจากนั้น คำสำคัญสัญลักษณ์พิเศษ

ประเภทสตริงพบได้ในทุกภาษาการเขียนโปรแกรม มันเป็นแบบดั้งเดิมและใน 1C มีฟังก์ชั่นมากมายสำหรับการทำงานกับมัน ในบทความนี้เราจะมาดูอย่างละเอียดยิ่งขึ้น วิธีต่างๆการทำงานกับประเภทสตริงใน 1C 8.3 และ 8.2 โดยใช้ตัวอย่าง

เส้น

ในการแปลงตัวแปรประเภทใดๆ ให้เป็นสตริง จะมีฟังก์ชันชื่อเดียวกันคือ “String()” พารามิเตอร์อินพุตจะเป็นตัวแปรเอง ซึ่งจะต้องได้รับการแสดงสตริง

String(False) // ส่งคืน "ไม่"
สตริง (12345) // ส่งกลับ "12,345"
String(CurrentDate()) //"07/21/2017 11:55:36″

เป็นไปได้ที่จะแปลงไม่เพียงแต่ประเภทดั้งเดิมเป็นสตริงเท่านั้น แต่ยังแปลงประเภทอื่น ๆ ได้ด้วย เช่น องค์ประกอบของไดเร็กทอรีและเอกสาร

ซกร์แอลพี, ซ็อกร์ล, ซ็อกร์พี

พารามิเตอร์อินพุตของฟังก์ชันเหล่านี้เป็นตัวแปรประเภทสตริง ฟังก์ชันจะลบอักขระที่ไม่มีนัยสำคัญ (ช่องว่าง การขึ้นบรรทัดใหม่ ฯลฯ): จากด้านซ้ายและด้านขวา เฉพาะจากด้านซ้าย และจากด้านขวาเท่านั้น ตามลำดับ

อักษรย่อ(" Spaces will be removal onทั้งสองด้าน ") // "Spaces will beเอาออกทั้งสองด้าน"
ตัวย่อ(" ช่องว่างทั้งสองด้านจะถูกลบออก ") // " ช่องว่างด้านซ้ายจะถูกลบออก "
ตัวย่อ(" ช่องว่างทั้งสองด้านจะถูกลบออก ") // " ช่องว่างทางด้านขวาจะถูกลบออก"

ลีโอ ขวา ปานกลาง

ฟังก์ชันเหล่านี้ช่วยให้คุณสามารถตัดส่วนของสตริงได้ ฟังก์ชัน "Left()" จะส่งคืนส่วนของสตริงจากด้านซ้ายของความยาวที่ระบุ ฟังก์ชัน "Right()" คล้ายกัน แต่จะครอบตัดจากด้านขวา ฟังก์ชัน “Avg()” ช่วยให้คุณระบุจำนวนอักขระที่จะเลือกบรรทัดและความยาวของบรรทัดได้

Lev("ตัวแปรสตริง", 4) // ส่งคืน "Str"
Right("ตัวแปร String", 7) // ส่งกลับ "ตัวแปร"
ปานกลาง ("ตัวแปรสตริง", 2, 5) // ส่งคืน "troco"

StrLength

ฟังก์ชันกำหนดจำนวนอักขระที่มีอยู่ในตัวแปรสตริง

StrLength("Word") // ผลลัพธ์ของการดำเนินการจะเป็นหมายเลข 5

หา

ฟังก์ชันนี้ทำให้สามารถค้นหาส่วนหนึ่งของสตริงในตัวแปรสตริงได้ ค่าที่ส่งคืนจะเป็นตัวเลขที่แสดงตำแหน่งของจุดเริ่มต้นของสตริงที่พบ หากไม่พบรายการที่ตรงกัน ระบบจะส่งคืนศูนย์

โปรดทราบว่าการค้นหาจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ หากมีสตริงย่อยการค้นหามากกว่าหนึ่งรายการในสตริงต้นฉบับ ฟังก์ชันจะส่งคืนจุดเริ่มต้นของการเกิดขึ้นครั้งแรก

Find("one, two, one, two, three", "two") // ฟังก์ชันจะคืนค่าตัวเลข 6

เส้นเปล่า

การใช้ฟังก์ชันนี้ช่วยให้คุณสามารถระบุได้ว่าสตริงว่างเปล่าหรือไม่ อักขระรอง เช่น ช่องว่าง การขึ้นบรรทัดใหม่ และอื่นๆ จะไม่ถูกนำมาพิจารณา

EmptyString("Pupkin Vasily Ivanovich") // ฟังก์ชันจะคืนค่าเป็นเท็จ
EmptyString(" ") // ฟังก์ชันจะส่งกลับค่า True

VReg, NReg, TReg

ฟังก์ชันเหล่านี้มีประโยชน์มากเมื่อเปรียบเทียบและแปลงตัวแปรสตริง "Vreg()" จะส่งคืนสตริงต้นฉบับเป็นตัวพิมพ์ใหญ่ "HPreg()" เป็นตัวพิมพ์เล็ก และ "TReg()" จะจัดรูปแบบเพื่อให้อักขระตัวแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่ และอักขระที่ตามมาทั้งหมดจะเป็นตัวพิมพ์ใหญ่

VReg("ผู้อำนวยการทั่วไป") // ค่าส่งคืน - "ผู้อำนวยการทั่วไป"
NReg("CEO DIRECTOR") // ส่งคืนค่า - "CEO"
TREG("CEO DIRECTOR") // ค่าตอบแทน – “ผู้อำนวยการทั่วไป”

แทนที่หน้า

ฟังก์ชันนี้คล้ายคลึงกับการแทนที่ใน โปรแกรมแก้ไขข้อความ. อนุญาตให้คุณแทนที่อักขระตัวหนึ่งหรือชุดอักขระด้วยอักขระตัวอื่นในตัวแปรสตริง

StrReplace("แดง ขาว เหลือง", ","", ";") // ส่งกลับ "สีแดง; สีขาว; สีเหลือง"

StrNumberLines

ฟังก์ชันนี้ช่วยให้คุณกำหนดจำนวนบรรทัดที่คั่นด้วยการขึ้นบรรทัดใหม่ในตัวแปรข้อความ

การวนซ้ำในตัวอย่างด้านล่างจะผ่านไปสามรอบเนื่องจากฟังก์ชัน LineNumberRow จะส่งกลับค่า 3:

สำหรับ ind = 1 โดย StrNumber of Strings ("Line1" + Symbols.PS + "Line2" + Symbols.PS + "Line3")
<тело цикла>
สิ้นสุดรอบ;

StrGetString

ฟังก์ชันนี้ทำงานกับข้อความหลายบรรทัดในลักษณะเดียวกับข้อความก่อนหน้า ช่วยให้คุณได้รับสตริงเฉพาะจากตัวแปรข้อความ

StrGetString("String1" + ตัวละคร.PS + "String2" + ตัวละคร.PS + "String3", 2) // ส่งคืน "String2"

จำนวนหน้าที่เกิดขึ้น

ฟังก์ชันนับจำนวนครั้งของอักขระหรือสตริงย่อยในสตริงการค้นหา

StrNumberAttachments("a;b;c;d; ", ";") // ฟังก์ชันจะคืนค่าตัวเลข 4

สัญลักษณ์และรหัสสัญลักษณ์

ฟังก์ชันเหล่านี้ช่วยให้คุณรับอักขระด้วยโค้ดในการเข้ารหัส Unicode รวมถึงกำหนดโค้ดนี้ด้วยอักขระด้วย

SymbolCode("A") // ฟังก์ชันจะคืนค่าตัวเลข 1,040
CharacterCode(1040) // ฟังก์ชันจะส่งกลับ “A”

งานทั่วไปเมื่อทำงานกับสตริง

การต่อสายอักขระ

หากต้องการรวมหลายสตริง (เพื่อทำการต่อข้อมูล) ก็เพียงพอแล้วที่จะใช้ตัวดำเนินการบวก

“Line 1″ + “Line 2″ //ผลลัพธ์ของการเพิ่มสองบรรทัดจะเป็น “Line 1 Line 2”

การแปลงประเภท

หากต้องการแปลงประเภทเป็นสตริง เช่น ลิงก์ไปยังองค์ประกอบไดเร็กทอรี ตัวเลข ฯลฯ การใช้ฟังก์ชัน "String()" ก็เพียงพอแล้ว ฟังก์ชันเช่น “ScrLP()” จะแปลงตัวแปรให้เป็นสตริงด้วย แต่จะตัดอักขระที่ไม่มีนัยสำคัญออกทันที

สตริง (1,000) // ส่งกลับ "1,000"

โปรดทราบว่าเมื่อแปลงตัวเลขเป็นสตริง โปรแกรมจะเพิ่มช่องว่างเพื่อแยกหลักพันโดยอัตโนมัติ เพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถใช้โครงสร้างต่อไปนี้:

StrReplace(String(1000),Characters.NPP,"") // ส่งคืน "1,000"

String(Format(1000,"HG=")) // ส่งคืน "1,000"

เครื่องหมายคำพูดในสตริง

บ่อยครั้งคุณจะต้องจัดการกับความจำเป็นในการระบุเครื่องหมายคำพูดในตัวแปรสตริง นี่อาจเป็นข้อความคำขอที่เขียนในตัวกำหนดค่าหรือเพียงตัวแปรก็ได้ เพื่อแก้ไขปัญหานี้ คุณเพียงแค่ต้องตั้งเครื่องหมายคำพูดสองอัน

Header = String("Horns and Hooves LLC - นั่นคือพวกเรา!") // จะกลับมา "Horns and Hooves LLC - นั่นคือพวกเรา!"

หลายบรรทัด, ตัวแบ่งบรรทัด

เพื่อที่จะสร้าง ข้อความหลายบรรทัดก็เพียงพอที่จะเพิ่มตัวแบ่งบรรทัด (Symbols.PS)

MultilineText = “บรรทัดแรก” + Symbols.PS + “บรรทัดที่สอง”

วิธีลบช่องว่าง

หากต้องการลบช่องว่างทางขวาหรือซ้าย คุณสามารถใช้ฟังก์ชัน “ScrAP()” (เช่นเดียวกับ “ScrL()” และ “ScrP()”):

StringNoSpaces = Abbreviation(" Many ตัวอักษร ") // ฟังก์ชันจะส่งกลับค่า "Many ตัวอักษร"

หลังจากแปลงตัวเลขเป็นสตริงแล้ว หากจำเป็นต้องลบช่องว่างที่ไม่แยกออก ให้ใช้โครงสร้างต่อไปนี้:

StringNoSpaces = StrReplace(String(99999),Characters.NPP,"") // ส่งคืน "99999"

โปรแกรมเมอร์มักใช้โครงสร้างต่อไปนี้ซึ่งช่วยให้คุณสามารถลบหรือแทนที่ด้วยอักขระอื่นทุกช่องว่างในตัวแปรข้อความ:

StringNoSpaces = StrReplace("hello", "") // ส่งคืน "hello"

การเปรียบเทียบสตริงระหว่างกัน

คุณสามารถเปรียบเทียบคำศัพท์กับเครื่องหมายเท่ากับปกติได้ การเปรียบเทียบจะคำนึงถึงขนาดตัวพิมพ์

"Hello" = "hello" // คืนค่าเป็นเท็จ
"Hello" = "Hello" // คืนค่า True
"สวัสดี" = "ลาก่อน" // จะกลับมาเป็นเท็จ

ใช้งานในเวอร์ชัน 8.3.6.1977

เราได้ขยายชุดฟังก์ชันที่ออกแบบมาเพื่อทำงานกับสตริง เราทำสิ่งนี้เพื่อให้คุณมีเครื่องมือขั้นสูงเพิ่มเติมสำหรับการแยกวิเคราะห์ข้อมูลสตริง ฟังก์ชั่นใหม่จะสะดวกและมีประโยชน์ในงานเทคโนโลยีของการวิเคราะห์ข้อความ ในงานที่เกี่ยวข้องกับการแยกวิเคราะห์ข้อความที่มีข้อมูลในรูปแบบที่จัดรูปแบบ นี่อาจเป็นการวิเคราะห์ไฟล์บางไฟล์ที่ได้รับจากอุปกรณ์ หรือ ตัวอย่างเช่น การวิเคราะห์บันทึกทางเทคโนโลยี

คุณสามารถดำเนินการทั้งหมดที่เคยใช้ฟังก์ชันใหม่มาก่อนได้ การใช้อัลกอริธึมที่ซับซ้อนไม่มากก็น้อยที่เขียนด้วยภาษาในตัว ดังนั้นฟังก์ชันใหม่ไม่ได้ให้ความสามารถใหม่ขั้นพื้นฐานแก่คุณ อย่างไรก็ตาม ช่วยให้คุณสามารถลดจำนวนโค้ดและทำให้โค้ดง่ายขึ้นและเข้าใจได้มากขึ้น นอกจากนี้ยังช่วยให้คุณเร่งความเร็วในการดำเนินการได้อีกด้วย เพราะแน่นอนว่าฟังก์ชั่นที่นำมาใช้ในแพลตฟอร์มนั้นทำงานได้เร็วกว่าอัลกอริทึมที่คล้ายกันซึ่งเขียนด้วยภาษาในตัว

ฟังก์ชันการจัดรูปแบบ StrTemplate()

ฟังก์ชันนี้จะแทนที่พารามิเตอร์เป็นสตริง ความจำเป็นในการแปลงดังกล่าวมักเกิดขึ้น เช่น เมื่อแสดงข้อความเตือน ไวยากรณ์สำหรับฟังก์ชันนี้เป็นดังนี้:

Strเทมเพลต(<Шаблон>, <Значение1-Значение10>)

<Шаблон>- นี่คือสตริงที่คุณต้องใช้ในการแทนที่การแสดงพารามิเตอร์

<Значение1> , ... <Значение10>- นี่คือพารามิเตอร์ (สูงสุดสิบ) ซึ่งจะต้องแทนที่การแทนค่าในสตริง

หากต้องการระบุตำแหน่งเฉพาะในเทมเพลตที่คุณต้องการดำเนินการทดแทน คุณต้องใช้เครื่องหมาย เช่น %1, ... %10 จำนวนเครื่องหมายที่เกี่ยวข้องกับเทมเพลตและจำนวนพารามิเตอร์ที่มีค่าต้องตรงกัน

ตัวอย่างเช่น ผลลัพธ์ของการดำเนินการตัวดำเนินการดังกล่าว:

จะมีบรรทัด:

ข้อผิดพลาดของข้อมูลในบรรทัด 2 (ต้องระบุประเภทวันที่)

ฟังก์ชันสำหรับการทำงานกับสตริง StrCompare()

ฟังก์ชันนี้เปรียบเทียบสองสตริงในลักษณะที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ตัวอย่างเช่นเช่นนี้:

คุณสามารถดำเนินการเดียวกันก่อนหน้านี้ได้โดยใช้ออบเจ็กต์การเปรียบเทียบค่า:

อย่างไรก็ตาม การใช้ฟีเจอร์ใหม่จะดูง่ายขึ้น นอกจากนี้ ฟังก์ชันนี้ทำงานได้ทั้งในไคลเอ็นต์แบบบางและเว็บไคลเอ็นต์ ซึ่งต่างจากออบเจ็กต์การเปรียบเทียบค่า

ฟังก์ชันสำหรับการทำงานกับสตริง StrStartsWith(), StrEndsAt()

ฟังก์ชันเหล่านี้จะกำหนดว่าสตริงเริ่มต้นด้วยสตริงย่อยที่ระบุ หรือสตริงลงท้ายด้วยสตริงย่อยที่ระบุหรือไม่ อัลกอริธึมสำหรับฟังก์ชั่นเหล่านี้ไม่ใช่เรื่องยากที่จะนำไปใช้ในภาษาฝังตัว แต่การมีอยู่ของพวกมันทำให้คุณสามารถเขียนโค้ดที่สะอาดตาและเข้าใจได้มากขึ้น และพวกมันทำงานเร็วขึ้น

ตัวอย่างเช่น สะดวกในการใช้ในคำสั่ง If:

ฟังก์ชั่นสำหรับการทำงานกับสตริง StrDivide(), StrConnect()

ฟังก์ชันเหล่านี้แบ่งสตริงออกเป็นส่วนๆ โดยใช้ตัวคั่นที่ระบุ หรือในทางกลับกัน จะรวมหลายบรรทัดเป็นหนึ่งเดียว โดยแทรกตัวคั่นที่เลือกไว้ระหว่างบรรทัดเหล่านั้น สะดวกสำหรับการสร้างหรือวิเคราะห์บันทึกและวารสารเทคโนโลยี ตัวอย่างเช่น คุณสามารถแยกวิเคราะห์รายการบันทึกทางเทคโนโลยีออกเป็นส่วนๆ ที่เหมาะสมสำหรับการวิเคราะห์เพิ่มเติมได้อย่างง่ายดาย:

ฟังก์ชันสำหรับการทำงานกับสตริง StrFind()

แทนที่จะใช้ฟังก์ชัน Find() แบบเก่า เราจึงนำฟังก์ชันนี้ไปใช้ คุณลักษณะใหม่ซึ่งมีคุณสมบัติเพิ่มเติม:

  • ค้นหาในทิศทางต่างๆ (ตั้งแต่ต้นจนจบ)
  • ค้นหาจากตำแหน่งที่ระบุ
  • ค้นหาเหตุการณ์ด้วยหมายเลขที่ระบุ (วินาที สาม ฯลฯ)

ในความเป็นจริง มันซ้ำซ้อนความสามารถของฟังก์ชันเก่า สิ่งนี้ทำเพื่อรักษาความเข้ากันได้กับโมดูลที่คอมไพล์ในเวอร์ชันเก่า ขอแนะนำให้คุณไม่ใช้ฟังก์ชัน Find() แบบเก่าอีกต่อไป

ด้านล่างนี้เป็นตัวอย่างการใช้ความสามารถในการค้นหาใหม่ การค้นหาแบบย้อนกลับมีประโยชน์เมื่อคุณต้องการส่วนสุดท้ายของสตริงที่เป็นทางการ เช่น ชื่อเต็มไฟล์ใน URL และการค้นหาจากตำแหน่งที่ระบุจะช่วยในกรณีที่คุณต้องการค้นหาในส่วนที่รู้จัก ไม่ใช่ในทั้งบรรทัด

ถึง ความสามารถพื้นฐานภาษาโปรแกรมมักเกี่ยวข้องกับการทำงานกับตัวเลขและสตริง โดยปกติแล้วคุณสมบัติเหล่านี้จะถูกฮาร์ดโค้ดลงในโค้ดคอมไพเลอร์ (หรือมีการใช้คลาส "ฐาน" ของภาษาการเขียนโปรแกรม)

ใน 1C ความสามารถในการทำงานกับสตริงนั้นถูกตั้งโปรแกรมไว้ในแพลตฟอร์มนั้นเอง วันนี้เราจะมาดูคุณสมบัติของการทำงานกับสตริง 1C ในโปรแกรมในภาษา 1C ในตัว

ค่าเส้น 1C

1. เริ่มจากสิ่งที่ง่ายที่สุดกันก่อน การสร้างตัวแปรและการกำหนดค่าสตริงคงที่ให้มีลักษณะเช่นนี้ใน 1C:

ตัวแปร = "สวัสดีชาวโลก!";

หากคุณต้องการระบุอักขระเครื่องหมายคำพูดในค่าสตริง 1C คงที่ คุณจะต้องเพิ่มเป็นสองเท่า “”

ตัวแปร = "สวัสดีชาวโลก"!;

2. สามารถระบุตัวแบ่งบรรทัด 1C ได้สองวิธีในคราวเดียว อันแรกใช้สัญลักษณ์ |

ตัวแปร = "สวัสดี
| โลก! ";

ประการที่สองคือการใช้การแจงนับระบบสัญลักษณ์ อนุญาตให้คุณเพิ่มทั้งตัวแบ่งบรรทัด 1C และอักขระที่ไม่พิมพ์อื่นๆ เช่น TAB

ตัวแปร = "สวัสดี" + Symbols.PS + "สันติภาพ!";

3. การกำหนดค่าใน 1C สามารถพัฒนาได้ไม่เพียง แต่สำหรับภาษาเดียว (รัสเซีย, อังกฤษหรืออื่น ๆ ) - แต่พร้อมกันสำหรับหลายภาษา ในกรณีนี้ ภาษาที่ใช้อยู่จะถูกเลือกที่ด้านล่างของหน้าต่าง 1C

รายการภาษาจะอยู่ในหน้าต่างการกำหนดค่าในสาขาทั่วไป/ภาษา แต่ละภาษาจะมีตัวระบุแบบสั้น เช่น รุหรือ อังกฤษ.

เป็นที่ชัดเจนว่าเมื่อเขียนโปรแกรมการกำหนดค่าดังกล่าว บรรทัด 1C ก็สามารถพูดได้หลายภาษาเช่นกัน ในการดำเนินการนี้ คุณสามารถสร้างบรรทัด 1C ดังกล่าวได้โดยระบุผ่าน ตัวเลือกตามตัวระบุภาษา:

ตัวแปร = "ru=""สวัสดีชาวโลก! ""; en=""สวัสดีชาวโลก! """;

หากคุณใช้เส้น 1C ที่สร้างในลักษณะนี้ตามปกติ มันจะเป็นสิ่งที่เขียนไว้ เพื่อให้ระบบแยกออกเป็นสองตัวเลือกและใช้ตัวเลือกที่ต้องการ คุณต้องใช้ฟังก์ชัน НStr():

//แก้ไขสำหรับการกำหนดค่าสองภาษา
รายงาน (NStr (ตัวแปร));

อุปกรณ์ประกอบฉากแบบเส้น 1C

แอ็ตทริบิวต์คือฟิลด์ในไดเร็กทอรี/เอกสาร 1C มันแตกต่างจากตัวแปรในโปรแกรมในภาษา 1C โดยมีการระบุประเภทของแอตทริบิวต์อย่างชัดเจน (หมายเลข, สตริง 1C ฯลฯ ) หากคุณต้องการทบทวนความทรงจำเกี่ยวกับอุปกรณ์ประกอบฉาก โปรดดูบทเรียนใน

หากคุณระบุประเภทของแอตทริบิวต์ - บรรทัด 1C คุณต้องระบุพารามิเตอร์เพิ่มเติม

บรรทัด 1C มีความยาวไม่จำกัด (ระบุเป็นความยาว = 0) และความยาวจำกัด โดยระบุจำนวนอักขระที่แน่นอน เส้น 1C ที่มีความยาวไม่จำกัดจะถูกจัดเก็บไว้ในแยกต่างหาก ตาราง SQLดังนั้นการใช้งานจึงมีประสิทธิผลน้อยกว่าที่จำกัด

นั่นคือเหตุผลที่การใช้สตริง 1C ที่มีความยาวไม่จำกัดจึงมีข้อจำกัด - ไม่สามารถใช้งานได้ทุกที่ ตัวอย่างเช่น ไม่อนุญาตให้ใช้เป็นหมายเลขเอกสาร รหัสอ้างอิง หรือการวัด

การทำงานกับสตริง 1C

มีฟังก์ชันในตัวหลายอย่างของแพลตฟอร์ม 1C สำหรับการทำงานกับสตริง

  • AbbrLP (“เหลือเชื่อ แต่จริง!”)
    ลบช่องว่างพิเศษออกจากบรรทัด 1C ยังสามารถใช้เพื่อแปลงประเภทใดๆ ให้เป็นสตริง 1C (เช่น ตัวเลข)
  • ตัวแปร = "วาสยา" + AbbrLP(" บวก") + "โอลิยา"; //จะมี "วาสยาบวกโอลิยา"
    ตัวอย่างการรวมค่าสตริง 1C หลายค่า ผลลัพธ์จะเป็นหนึ่งบรรทัด 1C
  • ตัวแปร = เลฟ("ดนตรี", 2); //จะเป็น "มู"
    ตัวแปร = ปานกลาง("ดนตรี", 2, 2); //จะมี "ภัยคุกคาม"
    ตัวแปร = สิทธิ์("ดนตรี", 2); //จะมี "คะ"
    ตัวเลือกต่างๆ สำหรับการรับสตริงย่อยจากสตริง 1C
  • ตัวแปร = ค้นหา ("เพลง", "zy"); //จะมี 3
    ค้นหาสตริงย่อยในสตริง 1C โดยเริ่มต้นด้วยอักขระ 1
  • ตัวแปร = StrLength("ดนตรี"); //จะมี 6
    ส่งกลับจำนวนอักขระในบรรทัด 1C
  • รายงาน("สวัสดี") //ในหน้าต่างข้อความที่ด้านล่างของหน้าต่าง 1C
    Alert("Hello") //กล่องโต้ตอบป๊อปอัป
    สถานะ("สวัสดี") //ในบรรทัดแสดงสถานะที่ด้านล่างซ้าย
    .

นำวัตถุไปที่บรรทัด 1C

ดังที่คุณทราบ รูปแบบที่นิยมที่สุดในการแลกเปลี่ยนข้อมูลที่มีโครงสร้างในปัจจุบันคือ XML สม่ำเสมอ รุ่นล่าสุดนางสาว ออฟฟิศเวิร์ดและ Excel บันทึกไฟล์ในรูปแบบนี้ (docx และ xlsx ตามลำดับ เปลี่ยนนามสกุลเป็น zip เปิดใน archiver)

แพลตฟอร์ม 1C สำหรับการแลกเปลี่ยนข้อมูลมีหลายตัวเลือก โดยตัวเลือกหลักคือ XML

1. วิธีที่ง่ายที่สุดคือการใช้ฟังก์ชัน Abbreviation() หรือ String() คุณสามารถใช้ฟังก์ชัน REPRESENTATION() ในเนื้อหาคำขอได้ ผลลัพธ์ของการกระทำจะเหมือนกัน - พวกเขาสร้างการแสดงสตริงของวัตถุ 1C ใด ๆ สำหรับผู้ใช้

สำหรับไดเร็กทอรีตามค่าเริ่มต้น นี่จะเป็นชื่อไดเร็กทอรี สำหรับเอกสาร – ชื่อเอกสาร หมายเลข และวันที่

2. วัตถุ 1C ใด ๆ (มีข้อจำกัด) สามารถแปลงเป็น XML และในทางกลับกัน กระบวนการแปลงเรียกว่าการทำให้เป็นอนุกรม

StringViewXml = XMLString(ค่า); //รับ XML จากค่า 1C
Value1C = XMLValue(Type("DirectoryLink.Nomenclature"),TypeStringXml); //รับค่า 1C จากสตริง XML คุณต้องระบุประเภท 1C ที่ควรได้รับ

3. มีวิธีของแพลตฟอร์ม 1C ในการแปลงวัตถุ 1C ใด ๆ ให้เป็นสตริง มันย้ายมาจากเวอร์ชัน 1C 7.7 โปรแกรมอื่นไม่เข้าใจรูปแบบนี้ แต่ 1C อื่น ๆ เข้าใจซึ่งทำให้ง่ายต่อการใช้สำหรับการแลกเปลี่ยนระหว่างฐานข้อมูล 1C

แถว = ValueInRowInt(Value1C); // รับสตริง 1C จากค่า 1C
ValueVFile("C:\MyFile.txt", Value1C); // อีกทางเลือกหนึ่งเราได้รับไฟล์ที่มีสตริงที่บันทึกไว้จากค่า 1C
Value1C = ValueFromStringInt (สตริง); // กลับจากบรรทัด 1C
Value1C = ValueFile("C:\MyFile.txt"); //กลับจากไฟล์

การแก้ไขบรรทัด 1C บนแบบฟอร์ม

นอกจากการทำงานกับสตริง 1C ในโปรแกรมในภาษา 1C แล้ว แน่นอนว่าฉันอยากให้ผู้ใช้สามารถแก้ไขได้ มีความเป็นไปได้หลายประการสำหรับสิ่งนี้:

1. วิธีที่ง่ายที่สุดคือการขอเข้าสาย 1C ตามความต้องการ วิธีนี้ใช้ในการสอนการเขียนโปรแกรม 1C ในชีวิตมีการใช้น้อยกว่ามาก (แต่ใช้!)

ตัวแปร = "";
Row = EnterValue(ตัวแปร, "ป้อนชื่อเต็ม");

2. ในการแสดงรายละเอียดของวัตถุ 1C (ไดเร็กทอรี/เอกสาร) หรือรายละเอียดแบบฟอร์ม (ดู) ช่องป้อนข้อมูลมักใช้บ่อยที่สุด นี่เป็นเครื่องมือทั่วไปใน 1C สำหรับผู้ใช้ในการทำงานกับช่องแก้ไข

3. สามารถขยายขีดความสามารถของช่องป้อนข้อมูลได้ (ดูคุณสมบัติของช่องป้อนข้อมูล คลิกขวารายละเอียดเพิ่มเติม):

  • ช่องทำเครื่องหมายโหมดแก้ไขหลายบรรทัด
  • ช่องทำเครื่องหมายการแก้ไขขั้นสูง (ใช้ได้หากทำเครื่องหมายในช่องก่อนหน้า)
  • โหมดรหัสผ่านช่องทำเครื่องหมาย (ดู)

4. หากความสามารถทั้งหมดของช่องป้อนข้อมูลไม่เพียงพอสำหรับคุณ แสดงว่ามีตัวแก้ไขในตัว หากต้องการเพิ่มลงในแบบฟอร์ม คุณต้องเพิ่มฟิลด์ลงในเมนูควบคุมแบบฟอร์ม/แทรก เอกสารข้อความ. ในคุณสมบัติ คุณสามารถระบุโหมดการทำงานได้ – คุณสมบัติส่วนขยาย

ช่องเอกสารข้อความไม่สามารถเชื่อมโยงกับข้อมูลได้โดยตรง มีความจำเป็นต้องเขียนฟังก์ชันในตัวจัดการเหตุการณ์ OnOpen() ของแบบฟอร์ม (ดู):

องค์ประกอบของแบบฟอร์ม ElementNameTextDocumentField.SetText (StringValue); //ในที่นี้ ValueString คือข้อความที่ได้รับ เช่น จากแอตทริบิวต์

และในตัวจัดการบันทึก - ตัวอย่างเช่นในปุ่มบันทึก - ให้เพิ่มการบันทึก:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //Valueบรรทัดที่นี่คือแอตทริบิวต์ที่เราบันทึกค่า

5. ใน 1C เวอร์ชัน 8.2.11 นิ้ว แบบฟอร์มควบคุม, ปรากฏขึ้น โอกาสใหม่การแสดงบรรทัด 1C – ฟิลด์เอกสารที่จัดรูปแบบ


เช่นเดียวกับฟิลด์ของเอกสารข้อความ คุณต้องตั้งค่าเมื่อเปิดและจดบันทึกเมื่อบันทึกด้วยตนเองโดยใช้โปรแกรม

  • ในวัตถุ 1C ที่เรากำลังสร้างแบบฟอร์ม (ไดเร็กทอรี เอกสาร การประมวลผล ฯลฯ) - เพิ่มแอตทริบิวต์ด้วยประเภท Value Storage
  • ในฟังก์ชัน OnReadOnServer() เราตั้งค่าข้อความจากแอตทริบิวต์

    // ที่นี่ Attribute คือแอตทริบิวต์ที่เพิ่มของวัตถุ 1C
    //ที่นี่ FormattedDocument คือชื่อของฟิลด์ในแบบฟอร์มที่จะแก้ไข
    &บนเซิร์ฟเวอร์

    FormattedDocument = CurrentObject.Attributes.Get();
    สิ้นสุดขั้นตอน

  • ในฟังก์ชัน BeforeWritingOnServer() หรือใช้ปุ่ม เราจะเขียนข้อความจากฟิลด์

    &บนเซิร์ฟเวอร์
    ขั้นตอนเมื่อ ReadOnServer(CurrentObject)
    CurrentObject.Props = NewValueStorage (FormattedDocument);
    สิ้นสุดขั้นตอน