.NET স্থির জায়গা সহ স্ট্রিং ফর্ম্যাট করুন


198

.NET স্ট্রিং.ফর্ম্যাট পদ্ধতিটি একটি নির্দিষ্ট দৈর্ঘ্যের স্ট্রিংয়ের মধ্যে একটি নির্দিষ্ট অবস্থানে একটি স্ট্রিং স্থাপনের মঞ্জুরি দেয়।

"স্ট্রিং এখানে যায়"
"স্ট্রিং এখানে যায়"
"স্ট্রিং এখানে যায়"

নেট ব্যবহার করে এটি কীভাবে করা হয়?

সম্পাদনা করুন - আমি ফরম্যাট / প্যাডলিফ্ট / প্যাডরাইট থেকে মৃত্যুর চেষ্টা করেছি। তারা কাজ করে না. কেন জানি না। এটি করার জন্য আমি আমার নিজের ফাংশনটি লিখে শেষ করেছি।

সম্পাদনা করুন - আমি একটি ভুল করেছি এবং ফর্ম্যাট স্পেসিফায়ারে কমা পরিবর্তে কোলন ব্যবহার করেছি। "{0,20}" হওয়া উচিত।

চমৎকার এবং সঠিক উত্তরের জন্য ধন্যবাদ।


48
আমার কাছে কখনও স্ট্রিং ফর্ম্যাটিংয়ের প্রশ্ন ছিল না যা আমি এই পৃষ্ঠায় গিয়ে উত্তর দিতে পারিনি: ব্লগ.স্টেভেক্সটনেট
ইনডেক্স.এফপি /

@ জ্যাকলুম: আমি আপনার উত্তরটি ভোট দিতে পছন্দ করি তবে মন্তব্যের জন্য কিছুই করতে পারে না
দিনাহ

প্যাডলিফ্ট আমার জন্য কাজ করে তা পরীক্ষা করে দেখুন যে আপনি প্যাডলেফ্টে জায়গা ছেড়ে চলেছেন (20, 'এখানে একটি স্পেস চলেছে')
জেদি মাস্টার স্পুকি

"স্থান রেখে" মানে কী? যদি আপনি বোঝাতে চান - আমি স্ট্রিংটি "ছাঁটাই করছি", তবে না। এটি এখনও কাজ করে না।
ব্যবহারকারী 72491

উত্তর:


472

এটি আপনাকে যে স্ট্রিংগুলির জন্য চেয়েছিল ঠিক সেগুলি দেবে:

string s = "String goes here";
string lineAlignedRight  = String.Format("{0,27}", s);
string lineAlignedCenter = String.Format("{0,-27}",
    String.Format("{0," + ((27 + s.Length) / 2).ToString() +  "}", s));
string lineAlignedLeft   = String.Format("{0,-27}", s);

64
এটি প্রশ্নের সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত, তবে দেখে মনে হচ্ছে ওপি স্ট্যাকওভারফ্লো ছেড়ে গেছে।
অলিভার

9
আপনি যদি সবুজ চেক বনাম সর্বাধিক ভোটের সন্ধান করেন তবে আপনি কীভাবে এসও করবেন তা জানেন না;)
ডেভ জেলিসন

2
@ ডেভ জেলিসন মনে হচ্ছে কেউ এটির সমাধানের জন্য একটি প্লাগইন লিখতে হবে বা এটির জন্য এটি কনফিগারযোগ্য ব্যবহারকারী পছন্দ হিসাবে তৈরি করা উচিত।
ওয়াল্টার স্ট্যাবোজ

1
পছন্দ করেছেন
ডেভ জেলিসন

2
অন্য সমস্ত ফর্ম্যাটিং ইউজক্যাসগুলিকে পছন্দ করার ,পরিবর্তে কেন এটি করা হয় :?
লাকলিলেকি

65

প্রথম এবং শেষ, কমপক্ষে, নিম্নলিখিত সিনট্যাক্স ব্যবহার করে সম্ভব:

String.Format("{0,20}", "String goes here");
String.Format("{0,-20}", "String goes here");

49

ভিজ্যুয়াল স্টুডিও 2015 এর হিসাবে আপনি ইন্টারপোলেটেড স্ট্রিংগুলির সাথে এটিও করতে পারেন (এটি একটি সংকলক কৌশল, যাতে আপনি লক্ষ্য করে। নেট ফ্রেমওয়ার্কটি কোন সংস্করণে আসে না)।

string value = "String goes here";
string txt1 = $"{value,20}";
string txt2 = $"{value,-20}";

9
এর এসি # 6 বৈশিষ্ট্য।
লাকলিলেকি

আমি বহু বছর ধরে সি # 6 ব্যবহার করে আসছি এবং এটি একটিও জানতাম না! সম্মত :)
Avrohom Yisroel

17

আপনাকে দেখানো হয়েছে PadLeftএবং PadRight। এটি নিখোঁজ পূরণ করবে PadCenter

public static class StringUtils
{
    public static string PadCenter(this string s, int width, char c)
    {
        if (s == null || width <= s.Length) return s;

        int padding = width - s.Length;
        return s.PadLeft(s.Length + padding / 2, c).PadRight(width, c);
    }
}

স্বরে নোট করুন: নিজের সিভি আপডেট করতে ভুলবেন না: "একদিন আমি জোয়েল কোহুরনের কোডও ঠিক করে ফেলেছি!" ;- ডি-সার্জ


জোয়েল, ভাল স্নিপেট - আমি এটি ব্যবহারের চেষ্টা করছি এবং এটি বেশিরভাগ কেন্দ্র করে না, যেভাবে। রিটার্ন লাইনটি এমন কিছু হওয়া উচিত যা (সম্পাদনা করার মতো পর্যাপ্ত রেপ আমার নেই ...): রিটার্ন এস.প্যাডফিট ((প্যাডিং / 2) + এস। দৈর্ঘ্য, গ) .প্যাডরাইট (প্রস্থ, সি);
শানমার্টিন

11

এটা চেষ্টা কর:

"String goes here".PadLeft(20,' ');
"String goes here".PadRight(20,' ');

কেন্দ্রের জন্য স্ট্রিংয়ের দৈর্ঘ্য পান এবং প্রয়োজনীয় অক্ষরগুলি সহ প্যাডলেফ্ট এবং প্যাড্রাইট করুন

int len = "String goes here".Length;
int whites = len /2;
"String goes here".PadRight(len + whites,' ').PadLeft(len + whites,' ');

স্ট্রিংয়ের মতো দেখে মনে হচ্ছে For ফর্ম্যাট () কলগুলি অতিমাত্রায়।
জোয়েল কোহোর্ন

প্যাড পদ্ধতিগুলি ভাল কারণ ফর্ম্যাট বিকল্পগুলির ধ্রুবক হতে দৈর্ঘ্য প্রয়োজন (যা String.Format("{0,-length}", something)সংকলন করা হবে না
রবার্তো

6

আলোচনার জন্য ধন্যবাদ, এই পদ্ধতিটিও (ভিবি) কাজ করে:

Public Function StringCentering(ByVal s As String, ByVal desiredLength As Integer) As String
    If s.Length >= desiredLength Then Return s
    Dim firstpad As Integer = (s.Length + desiredLength) / 2
    Return s.PadLeft(firstpad).PadRight(desiredLength)
End Function
  1. স্ট্রিংসেন্টারিং () দুটি ইনপুট মান নেয় এবং এটি একটি ফর্ম্যাট স্ট্রিং দেয়।
  2. যখন s এর দৈর্ঘ্য deisredLength এর চেয়ে বড় বা সমান হয় , ফাংশনটি মূল স্ট্রিংটি দেয়।
  3. যখন দৈর্ঘ্য গুলি চেয়ে ছোট desiredLength , এটা উভয় প্রান্ত padded করা হবে না।
  4. চরিত্রের ব্যবধানের কারণে পূর্ণসংখ্যা হয় এবং অর্ধ-স্থান নেই, আমাদের কাছে স্থানের অসম বিভাজন থাকতে পারে। এই বাস্তবায়নে, বৃহত্তর বিভাজন অগ্রণী প্রান্তে চলে যায়।
  5. প্যাডলফ্ট () এবং প্যাডরাইট () এর কারণে ফাংশনটির .NET ফ্রেমওয়ার্ক প্রয়োজন ।
  6. ফাংশনের শেষ লাইনে বাঁধাই বাম থেকে ডানে হয় তাই ফার্স্টপ্যাডটি কাঙ্ক্ষিত দৈর্ঘ্য প্যাডের পরে প্রয়োগ করা হয় ।

এখানে সি # সংস্করণটি রয়েছে:

public string StringCentering(string s, int desiredLength)
{
    if (s.Length >= desiredLength) return s;
    int firstpad = (s.Length + desiredLength) / 2;
    return s.PadLeft(firstpad).PadRight(desiredLength);
}

বুঝতে সহায়তা করার জন্য, পূর্ণসংখ্যার ভেরিয়েবল ফার্স্টপ্যাড ব্যবহার করা হয়। s.PadLeft (ফার্স্টপ্যাড ) নেতৃস্থানীয় সাদা স্পেসগুলির (সঠিক সংখ্যা ) প্রয়োগ করে। ডান-সর্বাধিক প্যাডরাইট (কাঙ্ক্ষিত দৈর্ঘ্য) এর পরে সাদা স্পেসগুলি অনুসরণ করে একটি কম বাইন্ডিং সমাপ্ত।


1
এসও, চি তে আপনাকে স্বাগতম। এটি গ্রেট প্রথম পোস্ট এবং উত্তরের আরও একটি উদাহরণ। +1
ব্রায়ান

ধন্যবাদ ব্রায়ান, এই পোস্টের শীর্ষে মূল প্রশ্নটি একটি দুর্দান্ত সূচনা পয়েন্ট। আমি আমার আগের সমস্ত পোস্ট এবং উত্তর দ্বারা অনুপ্রাণিত।
চি

1

জোয়েল কোহুর্নের উত্তর, অলিভারের সম্পাদনা এবং শানমার্টিনের মন্তব্য দ্বারা অনুপ্রাণিত হয়ে আমি এখানে তৈরি করেছি একটি ভিবি.এনইটি সংস্করণ:

    <Extension()>
Public Function PadCenter(ByVal [string] As String, ByVal width As Integer, ByVal c As Char) As String

    If [string] Is Nothing Then [string] = String.Empty
    If (width <= [string].Length) Then Return [string]

    Dim padding = width - [string].Length
    Return [string].PadLeft([string].Length + (padding \ 2), c).PadRight(width, c)

End Function

<Extension()>
Public Function PadCenter(ByVal [string] As String, ByVal width As Integer) As String

    If [string] Is Nothing Then [string] = String.Empty
    If (width <= [string].Length) Then Return [string]

    Dim padding = width - [string].Length
    Return [string].PadLeft([string].Length + (padding \ 2)).PadRight(width)

End Function

এটি একটি পাবলিক মডিউলটির ভিতরে একটি স্ট্রিং এক্সটেনশন হিসাবে সেট আপ করা হয়েছে (আপনি ভিবি.এনইটি তে এক্সটেনশনগুলি যেভাবে সি # এর চেয়ে কিছুটা আলাদা)) আমার সামান্য পরিবর্তনটি হ'ল এটি একটি নাল স্ট্রিংটিকে একটি খালি স্ট্রিং হিসাবে গণ্য করে এবং এটি একটি প্রশস্ত স্ট্রিংকে প্রস্থের মান (আমার নির্দিষ্ট প্রয়োজনগুলি পূরণ করে) দিয়ে প্যাড করে। আশা করি এটি যার প্রয়োজন হয় তার জন্য এটি সহজেই সি # তে রূপান্তরিত হবে। আমি উপরে উল্লিখিত উত্তর, সম্পাদনা এবং মন্তব্যগুলির রেফারেন্সের আরও ভাল উপায় যদি আমার পোস্টকে অনুপ্রাণিত করে তবে দয়া করে আমাকে জানান এবং আমি এটি করব - আমি পোস্টিংয়ে তুলনামূলকভাবে নতুন, এবং আমি এটি খুঁজে বের করতে পারি না একটি মন্তব্য (এখনও যথেষ্ট রেপ না থাকতে পারে)।


0

আমি একটি কোডপ্রজেক্ট নিবন্ধ পোস্ট করেছি যা আপনি যা চান তা হতে পারে।

দেখুন: অপ্রত্যক্ষ প্রস্থ এবং শৈলী বিন্যাসের জন্য এসি # উপায়।

মূলত এটি একটি পদ্ধতি, ফর্ম্যাটেক্স যা স্ট্রিং.ফোর্ডের মতো কাজ করে, ব্যতীত এটি কেন্দ্রিক প্রান্তিককরণ সংশোধককে অনুমতি দেয়।

FormatEx("{0,c10}", value);

মানে 10 অক্ষরের প্রশস্ত ক্ষেত্রের ক্ষেত্রে বিভিন্নআরগস [0] এর মান কেন্দ্র করে, অতিরিক্ত প্যাডিং জায়গার প্রয়োজন হলে ডানদিকে ঝুঁকুন।

FormatEx("{0,c-10}", value);

মানে 10 অক্ষর প্রশস্ত ক্ষেত্রের মধ্যে বিভিন্নআরগস [0] এর মানকে কেন্দ্র করে, অতিরিক্ত প্যাডিং জায়গার প্রয়োজন হলে হেলান বাম দিকে।

সম্পাদনা: অভ্যন্তরীণভাবে, স্ট্রিংয়ে ফোরমেটে কল করার জন্য ফর্ম্যাট এবং ভেরআর্গগুলিকে পুনর্গঠন করার জন্য কিছুটা পার্সিংয়ের সাথে এটি জোলের প্যাডসেন্টারের সংমিশ্রণ যা আপনি যা চান তা করে।

-Jesse


-1

দেখে মনে হচ্ছে আপনি এর মতো কিছু চান, এটি আপনাকে স্থির দৈর্ঘ্যের একটি স্ট্রিংয়ে একটি নির্দিষ্ট পয়েন্টে স্ট্রিং স্থাপন করবে:

Dim totallength As Integer = 100
Dim leftbuffer as Integer = 5
Dim mystring As String = "string goes here"
Dim Formatted_String as String = mystring.PadLeft(leftbuffer + mystring.Length, "-") + String.Empty.PadRight(totallength - (mystring.Length + leftbuffer), "-")

মনে রাখবেন যে যদি mystring.length + বাম বাফার সম্পূর্ণ দৈর্ঘ্য অতিক্রম করে তবে এতে সমস্যা হবে


-7
/// <summary>
/// Returns a string With count chars Left or Right value
/// </summary>
/// <param name="val"></param>
/// <param name="count"></param>
/// <param name="space"></param>
/// <param name="right"></param>
/// <returns></returns>
 public static string Formating(object val, int count, char space = ' ', bool right = false)
{
    var value = val.ToString();
    for (int i = 0; i < count - value.Length; i++) value = right ? value + space : space + value;
    return value;
}

3
এই কোডটি ব্যবহার করবেন না - এটি প্রচুর অপ্রয়োজনীয় স্ট্রিং বরাদ্দ জেনারেট করে। পরিবর্তে বিল্টিন ফর্ম্যাট স্পেসিফায়ার এবং প্যাডিং পদ্ধতি ব্যবহার করুন।
ওসকার বার্গগ্রেন

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