গোলং: মুদ্রণের সময় কোনও শূন্যের সাথে কীভাবে প্যাড করবেন?


110

আমি কীভাবে একটি নম্বর মুদ্রণ করতে পারি বা এটিকে প্রস্থ স্থির করতে শূন্য প্যাডিং দিয়ে স্ট্রিং তৈরি করতে পারি?

উদাহরণস্বরূপ, আমার যদি নম্বর থাকে 12এবং আমি এটি তৈরি করতে চাই 000012

উত্তর:


184

Fmt প্যাকেজটি আপনার জন্য এটি করতে পারে:

fmt.Printf("|%06d|%6d|\n", 12, 345)

আউটপুট:

|000012|   345|

% 06d এ 0 টি লক্ষ্য করুন, এটি এটির 6 প্রস্থ তৈরি করবে এবং জিরো দিয়ে প্যাড করবে। দ্বিতীয়টি স্পেস দিয়ে প্যাড করবে।

এটি নিজের জন্য এখানে চেষ্টা করুন: http://play.golang.org/p/cinDspMccp


4
আমি যদি প্যাডটি ডানদিকে যেতে চাই? পতাকা ব্যবহার করে -কেবল স্থান দেয়, আমার শূন্য দরকার।
মজিদারফ

6
আপনার সাথে পরে কাজ একটি স্ট্রিং চান, ব্যবহার Sprintfপরিবর্তেPrintf
oliverpool

49

ব্যবহার করুন Printfথেকে ফাংশন FMT প্যাকেজ একটি সঙ্গে widthএর 6এবং প্যাডিং চরিত্র 0:

import "fmt"
fmt.Printf("%06d", 12) // Prints to stdout '000012'

বিন্যাস নির্দিষ্টকরণকারকের ('ক্রিয়াপদ') এর আগে সরাসরি একটি পূর্ণসংখ্যা স্থাপন করে প্রস্থটি নির্ধারণ করে :

fmt.Printf("%d", 12)   // Uses default width,                          prints '12'
fmt.Printf("%6d", 12)  // Uses a width of 6 and left pads with spaces, prints '    12'

গোলং দ্বারা সমর্থিত একমাত্র প্যাডিং অক্ষর (এবং বেশিরভাগ অন্যান্য ভাষাগুলি) ফাঁকা স্থান এবং 0:

fmt.Printf("%6d", 12)   // Default padding is spaces, prints '    12'
fmt.Printf("%06d", 12)  // Change to 0 padding,       prints '000012'

বিয়োগটি প্রিন্ট করে মুদ্রণটি সঠিক-ন্যায়সঙ্গত করা সম্ভব -:

fmt.Printf("%-6d", 12)   // Padding right-justified, prints '12    '

সাবধান থাকুন যে ভাসমান পয়েন্ট সংখ্যাগুলির জন্য প্রস্থটিতে পুরো বিন্যাসের স্ট্রিং রয়েছে:

fmt.Printf("%06.1f", 12.0) // Prints '0012.0' (width is 6, precision is 1 digit)

এটি লক্ষ করা দরকারী যে প্রস্থটি *একটি সংখ্যার পরিবর্তে এবং intপরামিতি হিসাবে প্রস্থটি পেরিয়ে প্রোগ্রামক্রমেও সেট করা যেতে পারে :

myWidth := 6
fmt.Printf("%0*d", myWidth, 12) // Prints '000012' as before

উদাহরণস্বরূপ এটি কার্যকর হতে পারে যদি আপনি মুদ্রণ করতে চান সর্বাধিক মানটি কেবল রানটাইমেই জানা থাকে ( maxValনিম্নলিখিত উদাহরণে বলা হয়):

myWidth := 1 + int(math.Log10(float64(maxVal)))
fmt.Printf("%*d", myWidth, nextVal)

শেষ, আপনি যদি stdoutকোনও স্ট্রিং মুদ্রণ করতে না চান তবে ফিরে যেতে চান , একই পরামিতিগুলির সাথে fmt প্যাকেজSprintf থেকেও ব্যবহার করুন :

s := fmt.Sprintf("%06d", 12) // returns '000012' as a String

4
এটি একটি আশ্চর্যজনক উত্তর তবে আমি ছোট বাগটি ঠিক করতে চাই। fmt.Printf("%6.1f", 12.0)প্রিন্টগুলি নয় 0012.0`12.0` (ফাঁকা প্যাডিং)। 0 প্যাডিংয়ের জন্য আমাদের fmt.Printf("%06.1f", 12.0)পরিবর্তে ব্যবহার করা দরকার ।
mazend

4
@ মজেন্ড ধন্যবাদ, স্থির।
ক্রিস্টোফার ওয়েজবাক

30

এটি অর্জনের একটি সহজ উপায় রয়েছে। ব্যবহার

func padNumberWithZero(value uint32) string {
    return fmt.Sprintf("%02d", value)
}

fmt.Sprintfবিন্যাস করে এবং এটিকে যে কোনও জায়গায় মুদ্রণ না করেই একটি স্ট্রিং প্রদান করে। এখানে %02dমানটির জন্য বামে প্যাড শূন্য বলছে যার কাছে 2 সংখ্যার সংখ্যা রয়েছে। প্রদত্ত মানের যদি 2 বা ততোধিক সংখ্যক সংখ্যা থাকে তবে এটি প্যাড করবে না। উদাহরণ স্বরূপ:

  • যদি ইনপুট 1 হয়, আউটপুট 01 হবে।
  • যদি ইনপুট 12 হয়, আউটপুট 12 হবে।
  • যদি ইনপুট 1992 হয়, আউটপুট 1992 হবে।

আপনি %03dআরও জিরো প্যাডিংয়ের জন্য বা আরও কিছু ব্যবহার করতে পারেন ।


11

" গো ল্যাংয়ের মুদ্রণ বিন্যাসের তালিকা " প্রশ্নটি আমাদের মনে করিয়ে দেয় যে পতাকাটিও রয়েছে:

- বামের চেয়ে ডানদিকে ফাঁকা স্থানের প্যাড (ক্ষেত্রের বাম-ন্যায়সঙ্গত করুন)


আপনি DaddyOh/golang-samples/pad.goঅন্যান্য স্ট্রিং সিকোয়েন্সগুলি (' 0' বা ' ' এর চেয়ে জটিল ) দিয়ে প্যাড করতে চাইলে আরও বেশি প্যাডিং উদাহরণগুলি দেখতে পারেন :

  • leftPad(s string, padStr string, pLen int)
  • rightPad(s string, padStr string, pLen int)
  • leftPad2Len(s string, padStr string, overallLen int)
  • rightPad2Len(s string, padStr string, overallLen int)

দেখুন play.golang.org:

1234567890

leftPad(str, "*", 3)  ***1234567890
leftPad2Len(str, "*-", 13)  -*-1234567890
leftPad2Len(str, "*-", 14)  *-*-1234567890
leftPad2Len(str, "*", 14)  ****1234567890
leftPad2Len(str, "*-x", 14)  x*-x1234567890
leftPad2Len(str, "ABCDE", 14)  BCDE1234567890
leftPad2Len(str, "ABCDE", 4)  7890
rightPad(str, "*", 3)  1234567890***
rightPad(str, "*!", 3)  1234567890*!*!*!
rightPad2Len(str, "*-", 13)  1234567890*-*
rightPad2Len(str, "*-", 14)  1234567890*-*-
rightPad2Len(str, "*", 14)  1234567890****
rightPad2Len(str, "*-x", 14)  1234567890*-x*
rightPad2Len(str, "ABCDE", 14)  1234567890ABCD
rightPad2Len(str, "ABCDE", 4)  1234

এরিক পামার গোলাপের নমুনাগুলি সহ তাঁর রেপো সরিয়ে ফেললেন যাতে লিঙ্কটি আর কাজ করে না।
G07cha

4
@ কনস্টান্টিন আজিজভ ভালো পয়েন্ট আমি সেই লিঙ্কটি পুনরুদ্ধার করেছি। প্রকার, রকম.
ভনসি

3
func lpad(s string,pad string, plength int)string{
    for i:=len(s);i<plength;i++{
        s=pad+s
    }
    return s
}

এলপ্যাড ("3", "0", 2) ফলাফল: "03"

এলপ্যাড ("12", "0", 6) ফলাফল: "000012"


0

যারা ডান প্যাড চান তাদের জন্য আপনি এটি করতে পারেন:

str2pad := "12"
padWith := "0"
amt2pad := 6

//This will make sure there is always 6 characters total, padded on the right side
//Note to check if strings.Repeat returns a negative value
paddedStr := str2pad + strings.Repeat(padWith, amt2pad - len(str2pad))

//Outputs 120000
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.