Tuesday 4 July 2017

Perl printf รูปแบบ ไบนารี ตัวเลือก


ส่งกลับสตริงที่จัดรูปแบบตามอนุสัญญา printf ตามปกติของฟังก์ชัน C library sprintf ดูรายละเอียดเพิ่มเติมด้านล่างและดู sprintf (3) หรือ printf (3) ในระบบของคุณเพื่อดูคำอธิบายหลักการทั่วไป Perl จะจัดรูปแบบ sprintf ของตัวเอง: จะเลียนแบบฟังก์ชัน C sprintf (3) แต่ไม่ได้ใช้ยกเว้นตัวเลขทศนิยมและแม้กระทั่งการปรับเปลี่ยนมาตรฐานเท่านั้นที่ได้รับอนุญาต ส่วนขยายที่ไม่ได้มาตรฐานใน sprintf ภายในของคุณ (3) ไม่สามารถใช้งานได้จาก Perl ไม่เหมือนกับ printf sprintf ไม่ทำสิ่งที่คุณอาจจะหมายถึงเมื่อคุณส่งอาร์เรย์เป็นอาร์กิวเมนต์แรกของคุณ อาร์เรย์จะได้รับบริบท scalar และแทนที่จะใช้องค์ประกอบ 0 ของอาร์เรย์เป็นรูปแบบ Perl จะใช้การนับองค์ประกอบในอาร์เรย์เป็นรูปแบบซึ่งแทบไม่เคยมีประโยชน์ Perls sprintf อนุญาตให้มีการแปลงที่รู้จักแพร่หลายต่อไปนี้: นอกจากนี้ Perl อนุญาต Conversion ต่อไปนี้ที่ได้รับการสนับสนุนอย่างกว้างขวางดังต่อไปนี้: ในที่สุดสำหรับความเข้ากันได้ย้อนหลัง (และเราหมายถึงย้อนหลัง) Perl อนุญาต Conversion ที่ไม่จำเป็น แต่ได้รับการสนับสนุนอย่างกว้างขวางเหล่านี้: โปรดทราบว่าจำนวน เลขทศนิยมในสัญกรณ์ทางวิทยาศาสตร์ที่ผลิตโดย e E. g และ G สำหรับตัวเลขที่มีโมดูลัสของเลขยกกำลังน้อยกว่า 100 ขึ้นอยู่กับระบบ: อาจเป็นสามหรือน้อยกว่า (ศูนย์เบาะถ้าจำเป็น) กล่าวอีกนัยหนึ่ง 1.23 ครั้ง 10 ถึง 99 อาจเป็น 1.23e99 หรือ 1.23e099 ในทำนองเดียวกันสำหรับ a และเลขยกกำลังหรือตัวเลขฐานสิบหกอาจลอย: โดยเฉพาะอย่างยิ่งตัวเลือกการกำหนดค่า Perl คู่ที่ยาวอาจทำให้เกิดความประหลาดใจ ระหว่างตัวอักษรและตัวอักษรรูปแบบคุณอาจระบุแอตทริบิวต์เพิ่มเติมที่ควบคุมการตีความรูปแบบได้ ในลำดับเหล่านี้คือดัชนีพารามิเตอร์รูปแบบที่ชัดเจนเช่น 2. โดยค่าเริ่มต้น sprintf จะฟอร์แมตอาร์กิวเมนต์ที่ไม่ได้ใช้ต่อไปในรายการ แต่จะช่วยให้คุณสามารถใช้อาร์กิวเมนต์ไม่อยู่ในลำดับคำสั่ง: เมื่อเว้นวรรคและเครื่องหมายบวกจะได้รับ เป็นธงในครั้งเดียวพื้นที่จะถูกละเว้น เมื่อค่าสถานะและค่าความแม่นยำจะได้รับในการแปลง o ความแม่นยำจะเพิ่มขึ้นถ้าจำเป็นสำหรับผู้นำ 0 ธงนี้บอกให้ Perl ตีความสตริงที่ให้มาเป็นเวกเตอร์ของจำนวนเต็มหนึ่งสำหรับแต่ละอักขระในสตริง Perl ใช้รูปแบบกับแต่ละจำนวนเต็มในการเปิดแล้วรวมสายผลลัพธ์ที่มีตัวคั่น (จุดโดยค่าเริ่มต้น) ค่านี้อาจเป็นประโยชน์สำหรับการแสดงค่าลำดับอักขระของสตริงในสตริงโดยพลการ: ใส่เครื่องหมายดอกจันก่อน v เพื่อแทนที่สตริงที่จะใช้เพื่อแยกหมายเลข: คุณสามารถระบุหมายเลขอาร์กิวเมนต์ที่จะใช้สำหรับสตริงที่ใช้ร่วมกันอย่างเจาะจงเช่น 2v สำหรับ ตัวอย่าง: อาร์กิวเมนต์มักถูกฟอร์แมตให้มีความกว้างเท่าที่จำเป็นเพื่อแสดงค่าที่กำหนด คุณสามารถแทนที่ความกว้างโดยการใส่ตัวเลขที่นี่หรือรับความกว้างจากอาร์กิวเมนต์ถัดไป (ด้วย) หรือจากอาร์กิวเมนต์ที่ระบุ (เช่นกับ 2): ถ้าความกว้างของฟิลด์ที่ได้รับเป็นค่าลบจะมีผลเหมือนกับ - ธง: left-justification คุณสามารถระบุความแม่นยำ (สำหรับ Conversion ที่เป็นตัวเลข) หรือความกว้างสูงสุด (สำหรับ Conversion สตริง) โดยระบุ a. ตามด้วยหมายเลข สำหรับรูปแบบจุดลอยตัวยกเว้น g และ G. นี้ระบุจำนวนตำแหน่งที่ด้านขวาของจุดทศนิยมที่จะแสดง (ค่าดีฟอลต์คือ 6) ตัวอย่างเช่นสำหรับ g และ G จำนวนนี้จะระบุจำนวนสูงสุดของตัวเลขที่จะแสดงรวมทั้งตัวเลขที่อยู่ก่อนจุดทศนิยมและค่าที่อยู่หลังตัวอยางเชน: สําหรับการแปลงจํานวนเต็มระบุความแม่นยำแสดงวาเอาตพุทของจํานวนตัวอยางควรเปนศูนย - padded เพื่อความกว้างนี้ที่ธง 0 จะถูกละเว้น: สำหรับการแปลงสายการระบุความแม่นยำ truncates สตริงเพื่อให้พอดีกับความกว้างที่ระบุ: นอกจากนี้คุณยังสามารถได้รับความแม่นยำจากอาร์กิวเมนต์ต่อไปโดยใช้ .. หรือจากอาร์กิวเมนต์ที่ระบุ .2): ถ้าความแม่นยำได้รับเป็นลบจะถือว่าไม่มีความแม่นยำเลย สำหรับการแปลงเป็นตัวเลขคุณสามารถระบุขนาดเพื่อตีความหมายเลขดังกล่าวได้โดยใช้ l ชั่วโมง V. q L. หรือ ll สำหรับการแปลงจำนวนเต็ม (duox X bi DUO) ตัวเลขจะถูกสันนิษฐานว่าเป็นขนาดจำนวนเต็มที่เป็นค่าเริ่มต้นอยู่บนแพลตฟอร์มของคุณ (โดยปกติคือ 32 หรือ 64 บิต) แต่คุณสามารถแทนที่ได้โดยใช้ประเภท C มาตรฐานมาตรฐาน โดยคอมไพเลอร์ที่ใช้ในการสร้าง Perl: ณ วันที่ 5.14 ไม่มีข้อใดที่ทำให้เกิดข้อยกเว้นถ้าไม่ได้รับการสนับสนุนบนแพลตฟอร์มของคุณ อย่างไรก็ตามหากมีการใช้คำเตือนจะมีคำเตือนเกี่ยวกับระดับคำเตือนของ printf ในธง Conversion ที่ไม่ได้รับการสนับสนุน หากคุณต้องการยกเว้นให้ทำดังนี้: ถ้าคุณต้องการทราบเกี่ยวกับการพึ่งพาเวอร์ชันก่อนที่คุณจะเริ่มต้นใช้งานโปรแกรมให้วางข้อมูลบางอย่างที่ด้านบนสุด: คุณสามารถตรวจสอบได้ว่า Perl สนับสนุน Quads ผ่าน Config: (EFG EFG) ตัวเลขมักจะถือว่าเป็นขนาดจุดลอยตัวเริ่มต้นบนแพลตฟอร์มของคุณ (double หรือ long double) แต่คุณสามารถบังคับให้ใช้คู่กับ q ได้นาน L. หรือ ll ถ้าแพลตฟอร์มของคุณสนับสนุนพวกเขา คุณสามารถตรวจสอบได้ว่า Perl ของคุณสนับสนุนคู่แบบยาวผ่านทาง Config หรือไม่: คุณสามารถตรวจสอบได้ว่า Perl ถือว่า Double double เป็นค่าขนาดลอยตัวเริ่มต้นที่จะใช้บนแพลตฟอร์มของคุณผ่านทาง Config: นอกจากนี้ยังสามารถเพิ่มคู่ผสมและคู่ผสมได้เช่นเดียวกัน สิ่ง: ตัวระบุขนาด V ไม่มีผลต่อโค้ด Perl แต่ได้รับการสนับสนุนสำหรับความเข้ากันได้กับรหัส XS หมายถึงใช้ขนาดมาตรฐานสำหรับจำนวนเต็ม Perl หรือหมายเลขจุดลอยตัวซึ่งเป็นค่าเริ่มต้น โดยปกติ sprintf จะใช้อาร์กิวเมนต์ที่ไม่ได้ใช้ต่อไปเป็นค่าสำหรับจัดรูปแบบสำหรับข้อกำหนดแต่ละรูปแบบ หากข้อกำหนดรูปแบบใช้เพื่อต้องการอาร์กิวเมนต์เพิ่มเติมข้อมูลเหล่านี้จะถูกนำมาใช้จากรายการอาร์กิวเมนต์ตามลำดับที่ปรากฏในข้อกำหนดรูปแบบก่อนค่าในรูปแบบ ในกรณีที่อาร์กิวเมนต์ถูกระบุโดยดัชนีที่ชัดเจนการดำเนินการนี้จะไม่มีผลต่อคำสั่งปกติของอาร์กิวเมนต์แม้ว่าจะมีการระบุอาร์กิวเมนต์ที่ระบุไว้อย่างชัดเจนแล้วก็ตาม ใช้สำหรับความกว้าง b สำหรับความแม่นยำและ c เป็นค่าในการจัดรูปแบบในขณะที่จะใช้สำหรับความกว้างและความแม่นยำและ b เป็นค่าในรูปแบบ ต่อไปนี้เป็นตัวอย่างเพิ่มเติมที่ควรทราบว่าเมื่อใช้ดัชนีที่ชัดเจนอาจจำเป็นต้องหลบหนี: ถ้าใช้ตำแหน่งที่ตั้ง (รวมถึงตำแหน่งที่ตั้ง 39: notcharacters39) และ POSIX :: setlocale ถูกเรียกใช้อักขระที่ใช้สำหรับตัวคั่นหลักใน หมายเลขแบบลอยตัวที่จัดรูปแบบจะได้รับผลกระทบจากโลแคล LCNUMERIC ดู perllocale และ POSIX. ไม่ใช่ตัวระบุการแปลงไบนารีใน glibc โดยปกติ คุณสามารถเพิ่มประเภท Conversion ที่กำหนดเองลงในตระกูลฟังก์ชัน printf () ใน glibc ดูรายละเอียดจาก registerprintffunction คุณสามารถเพิ่มการแปลง B ที่กำหนดเองเพื่อการใช้งานของคุณเองได้หากช่วยให้รหัสแอปพลิเคชันสามารถใช้งานได้ง่ายขึ้น นี่คือตัวอย่างของวิธีการใช้รูปแบบ printf ที่กำหนดเองใน glibc นอกจากนี้สิ่งที่คุณกำลังพูดถึงเกี่ยวกับ w. r.t. การจัดการหลาย ๆ ผลลัพธ์ตามลำดับไม่ใช่การอ้างสิทธิ์ซ้ำ ๆ แต่เป็นการลดผลกระทบจากการใช้สิ่งที่เป็นจำนวนมากไปยังวัตถุระดับโลกเพื่อเก็บผลลัพธ์ไว้ฟังก์ชันนี้ไม่ได้ถูกป้อนใหม่ ใน C ที่เหมาะสมหรืออย่างน้อยที่สุดที่ใช้กันอย่างแพร่หลายสำนวนสำหรับการจัดการกับหน้าที่ที่เก็บผลของพวกเขาในวัตถุระดับโลกคือการคัดลอกผลเหล่านั้นทันทีที่ได้รับพวกเขา นี่เป็นข้อได้เปรียบที่สำคัญถ้าหากจำเป็นต้องมีผลเพียงครั้งเดียวก็ไม่มีการจัดสรรเพิ่มเติม ndash Greg A. Woods 27 พ. ย. ที่ 12:51 ที่นี่เราจะต้องไม่เห็นด้วย ฉันไม่สามารถมองเห็นวิธีการเพิ่มสัญลักษณ์ preprocessor ใด ๆ ที่ไม่สร้างความรำคาญให้เกิดขึ้นที่ใดก็ได้ใกล้กับความเป็นอันตรายของการ จำกัด กรณีการใช้งานอย่างรุนแรงทำให้อินเทอร์เฟซเกิดข้อผิดพลาดได้ง่ายโดยสงวนที่เก็บข้อมูลถาวรสำหรับระยะเวลาของโปรแกรมสำหรับค่าชั่วคราวและสร้างรหัสที่เลวร้ายยิ่งขึ้นบนแพลตฟอร์มที่ทันสมัยที่สุด . ndash R .. Nov 27 12 at 1:53 ครอบครัว printf () สามารถพิมพ์ได้เฉพาะฐาน 8, 10 และ 16 โดยใช้ specifiers มาตรฐานโดยตรง ขอแนะนำให้สร้างฟังก์ชันที่แปลงจำนวนเป็นสตริงตามความต้องการเฉพาะของรหัส คำตอบอื่น ๆ ทั้งหมดมีข้อ จำกัด ดังกล่าวอย่างน้อยหนึ่งข้อ ใช้หน่วยความจำแบบสแตติกสำหรับบัฟเฟอร์คืน ซึ่งจะ จำกัด จำนวนครั้งที่ฟังก์ชันอาจถูกใช้เป็นอาร์กิวเมนต์ที่ printf () จัดสรรหน่วยความจำที่ต้องการรหัสโทรศัพท์ให้เป็นคำแนะนำฟรี ต้องใช้รหัสโทรศัพท์เพื่อระบุบัฟเฟอร์ที่เหมาะสม โทร printf () โดยตรง นี่เป็นหน้าที่ใหม่สำหรับ fprintf () sprintf () vsprintf () ฯลฯ ใช้ช่วงที่ลดลงของจำนวนเต็ม ต่อไปนี้ไม่มีข้อ จำกัด ข้างต้น ต้องใช้ C99 หรือใหม่กว่าและใช้ s ใช้ตัวอักษรผสมเพื่อให้พื้นที่บัฟเฟอร์ มีปัญหาเกี่ยวกับการเรียกหลายครั้งใน printf () ตัวอย่างของรูปแบบ printf ของ Perl (หน้าอ้างอิง) เป็นหน้าอ้างอิง (cheat sheet) ของตัวเลือกการจัดรูปแบบ Perl printf หวังเป็นอย่างยิ่งว่ารายการนี้จะครอบคลุมตัวเลือกการพิมพ์ Perl printf ที่พบมากที่สุดที่คุณจะเจอหรืออย่างน้อยก็ควรจะชี้ไปในทิศทางที่ถูกต้อง Perl printf - การจัดรูปแบบสตริงนี่คือตัวอย่างที่แสดงวิธีการจัดรูปแบบสตริงด้วย Perl และ printf ฉันจะใช้เครื่องหมายคำพูดเดียวใน printf ตัวอย่างทั้งหมดของฉันเพื่อช่วยแสดงเหตุผลด้านซ้ายและด้านขวา รหัสดังกล่าวส่งผลต่อไปนี้: Perl printf-formatting integers รหัสต่อไปนี้แสดงวิธีการพิมพ์เลขจำนวนเต็มด้วย Perl โดยใช้ฟังก์ชัน printf ตัวอย่างเหล่านี้แสดงวิธีควบคุมความกว้างของฟิลด์การพิมพ์ด้านซ้ายที่ถูกต้องด้านขวาถูกต้องและศูนย์เต็ม และ heres ผลลัพธ์จากรหัสแหล่งที่มา: การจัดรูปแบบตัวเลขลอยตัวต่อไปนี้รหัส Perl printf แสดงให้เห็นถึงวิธีการจัดรูปแบบผลลัพธ์ลอย: และ heres ผลลัพธ์จากเหล่านั้น printf floating - point (ทศนิยม) ตัวอย่าง: การจัดรูปแบบสกุลเงินหวังว่าคุณจะเห็นจาก ตัวอย่างเช่นวิธีหนึ่งในการพิมพ์สกุลเงินมีสองตำแหน่งหลังจากทศนิยมเช่นนี้ทำงานสำหรับโปรแกรมง่ายๆ แต่สำหรับโปรแกรมที่มีประสิทธิภาพมากขึ้นคุณอาจต้องการทำงานมากกว่านี้ ต่อไปนี้คือตัวอย่าง Perl printf ที่แสดงให้เห็นถึงวิธีพิมพ์อักขระอื่น ๆ ในเอาต์พุตของคุณรวมทั้งแท็บทับเครื่องหมายทับขวาและบรรทัดใหม่ การรวมกันของเทคนิคนี่เป็นตัวอย่างเล็ก ๆ ที่แสดงให้เห็นถึงเทคนิคหลายอย่างในคำสั่ง printf อันหนึ่งอัน ได้แก่ ผลลัพธ์ต่อไปนี้: เนื้อหา printf ที่เกี่ยวข้องต่อไปนี้เป็นลิงค์ไปยัง tutorials printf อื่น ๆ ในเว็บไซต์ของเรา:

No comments:

Post a Comment