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);
สิ้นสุดขั้นตอน