আপনি কীভাবে মাল্টলাইন স্ট্রিং লিখবেন?


611

পাইতে পাইথনের বহু লাইন স্ট্রিংয়ের মতো কিছু রয়েছে:

"""line 1
line 2
line 3"""

যদি তা না হয় তবে একাধিক লাইনে বিস্তৃত স্ট্রিং লেখার পছন্দের উপায়টি কী?


উত্তর:


972

ভাষার স্পেসিফিকেশন অনুসারে আপনি কাঁচা স্ট্রিং আক্ষরিক ব্যবহার করতে পারেন, যেখানে স্ট্রিংটি ডাবল কোটের পরিবর্তে ব্যাকটিক্স দ্বারা সীমিত করা হয়।

`line 1
line 2
line 3`

176
পার্শ্ব নোট হিসাবে: 'কাঁচা উদ্ধৃতি' বলা হয়, পালানোর ক্রমগুলি বিশ্লেষণ করে না। নিয়মিত অভিব্যক্তি নিদর্শনগুলি লেখার জন্য স্ট্রিং আক্ষরিক কারণেই এগুলিতে সাধারণত অ-মানক অব্যাহতি ক্রম থাকে যা গো সংকলককে ডাবল-পলায়ন না করার অভিযোগ করে। এটি নিদর্শনগুলি পরিষ্কার এবং তুলনামূলকভাবে পঠনযোগ্য রাখে।
জিমট

10
যদিও শেষ লাইনের ফাঁকগুলি ব্যবহার করার সময় এটির সাথে সতর্কতা অবলম্বন করা উচিত। উদাহরণস্বরূপ, আপনি যদি কোনও স্থান রেখে দেন তবে line 1এটি আপনার সম্পাদকটিতে অদৃশ্য হয়ে যাবে তবে স্ট্রিংয়ে উপস্থিত থাকবে।
অরি ব্যান্ড

2
@ ড্যানিয়েল্ড এটি সামান্য ননসিকিউটার, তবে কোন উপভাষা? সম্ভবত মূলত মাইএসকিউএল? stackoverflow.com/a/10574031 নোট করুন যে একই যুক্তির প্রসারিত করে মার্কডাউন, বা শেল স্ক্রিপ্টগুলি এম্বেড করার জন্য ব্যথা হয় (যদি আপনি তার জায়গায় ব্যাকটিক ব্যবহার না করেন $(abcd))।
ইভান ভুইকা

8
@ কাইলহিউটন: সম্ভবত ড্যানিয়েল ডি তার / তার এসকিউএল অনুসন্ধানগুলিতে ব্যাকটিক চরিত্রটি ব্যবহার করছেন (যেমন মাইএসকিউএল ব্যবহারকারীরা প্রায়শই করেন) এবং এটি `+" `" + represent হিসাবে উপস্থাপন করতে এবং অনুলিপি-ও-অতীতত্বকে ভঙ্গ করে painful
রুখ

1
এর নীচের দিকটি হ'ল আপনি যদি এটি ইনডেন্ট কোডের মধ্যে লিখছেন তবে ট্যাবগুলি স্ট্রিংয়ের মধ্যে অন্তর্ভুক্ত হবে এবং এগুলি থেকে মুক্তি পেতে আপনার কোডটিকে কুৎসিত দেখাবে। এইরকম পরিস্থিতিতে আমি আজিমের উত্তরটি ব্যবহার করতে পছন্দ করব
1919

111

তুমি লিখতে পারো:

"line 1" +
"line 2" +
"line 3"

যা একই:

"line 1line 2line3"

পিছনে টিক্স ব্যবহারের বিপরীতে, এটি পালানোর অক্ষর সংরক্ষণ করবে। নোট করুন যে "+" অবশ্যই 'শীর্ষস্থানীয়' লাইনে থাকতে হবে অর্থাৎ:

"line 1"
+"line 2"

একটি ত্রুটি উত্পন্ন করে।


32
এই সমাধানটি পাইথনের মাল্টলাইন স্ট্রিংগুলির সাথে সাদৃশ্য নয়। এটি স্ট্রিংকে একাধিক লাইনের উপরে আক্ষরিক বিভক্ত করে তোলে তবে স্ট্রিংটিতে নিজেই একাধিক লাইন থাকে না।
বেন বাটলার-কোল

2
যেহেতু এটি পালানোর অক্ষর সংরক্ষণ করে, তাই নতুন লাইনগুলি সহজেই যুক্ত করা যায় \nএবং গতিশীল স্ট্রিং এবং এর সাথে কাজ করা আরও সহজ। আমি যদি সঠিক হয় তবে গ্রহণযোগ্য উত্তরটি হ'ল স্থির স্ট্রিংগুলিকে সুন্দর দেখানোর জন্য।
রাইজিংসুন

1
এটিও কি খুব অদক্ষ হবে না? স্ট্রিংটি 3x a 6 চর ক্রম হতে দিন: 6 + 2 * 6 + 3 * 6 = 36 অক্ষর বরাদ্দ করা হয় যখন অনুকূল 18 হবে (যেহেতু স্ট্রিং অপরিবর্তনীয়, প্রতিবার আপনি দুটি স্ট্রিং যুক্ত করলে দুটি দৈর্ঘ্যের সাথে একটি নতুন স্ট্রিং তৈরি হয় স্ট্রিংস কনকেনটেটেড)।
এন0থিং

@ এন0টিং: যদি কেবল স্ট্রিং লিটারেল থাকে তবে রানটাইম পার্থক্য নেই কারণ সংকলকটি অনুকূলিত করবে। সংকলনের সময়টিতে একটি ছোট (মাইক্রোসেকেন্ডস, এমনকি ন্যানোসেকেন্ডস) পার্থক্য রয়েছে।
ডলমেন

আমি বিশ্বাস করি যে এটি
সিআরএলএফ

39

স্ট্রিং আক্ষরিক থেকে :

  • কাঁচা স্ট্রিং আক্ষরিক মাল্টলাইন সমর্থন করে (তবে পালানো অক্ষরের ব্যাখ্যা করা হয় না)
  • ' \n' এর মতো স্ট্রিং আক্ষরিক অর্থ পালিয়ে যাওয়া অক্ষরগুলি ব্যাখ্যা করে ।

তবে, যদি আপনার মাল্টি-লাইন স্ট্রিংটিতে একটি ব্যাককোয়াইট (`) অন্তর্ভুক্ত করতে হয় তবে আপনাকে একটি ব্যাখ্যাযুক্ত স্ট্রিং আক্ষরিক ব্যবহার করতে হবে:

`line one
  line two ` +
"`" + `line three
line four`

আপনি কোনও কাঁচা স্ট্রিং আক্ষরিক (`` xx \) এ সরাসরি একটি ব্যাককোট (`) রাখতে পারবেন না ।
আপনাকে ব্যবহার করতে হবে (" কীভাবে ব্যাককোয়াইট স্ট্রিংয়ে একটি ব্যাককোট রাখবেন? " তে বর্ণিত হিসাবে ):

 + "`" + ...

33

মাল্টি-লাইন স্ট্রিংয়ের জন্য কাঁচা স্ট্রিং লিটারাল ব্যবহার করুন:

func main(){
    multiline := `line 
by line
and line
after line`
}

কাঁচা স্ট্রিং আক্ষরিক

কাঁচা স্ট্রিং লিটারালগুলি ব্যাক কোটগুলির মধ্যে যেমন রয়েছে তেমন চরিত্রের অনুক্রম `foo`। উদ্ধৃতিগুলির মধ্যে, পিছনের উদ্ধৃতি ব্যতীত যে কোনও চরিত্র উপস্থিত হতে পারে।

একটি উল্লেখযোগ্য অংশটি হ'ল কাঁচা আক্ষরিক কেবল বহু-লাইন নয় এবং বহু-লাইন হওয়া এর একমাত্র উদ্দেশ্য নয়।

কাঁচা স্ট্রিং আক্ষরিক মান হ'ল উদ্ধৃতিগুলির মধ্যে বর্ণনাহীন (স্পষ্টতই UTF-8-encoded) অক্ষরের সমন্বয়ে গঠিত স্ট্রিং; বিশেষত, ব্যাকস্ল্যাশগুলির কোনও বিশেষ অর্থ নেই ...

সুতরাং পলায়নগুলি ব্যাখ্যা করা হবে না এবং টিক্সের মধ্যে নতুন লাইনগুলি আসল নতুন লাইন হবে

func main(){
    multiline := `line 
by line \n
and line \n
after line`

    // \n will be just printed. 
    // But new lines are there too.
    fmt.Print(multiline)
}

শ্রেণীপরংপরা

সম্ভবত আপনার দীর্ঘ লাইন রয়েছে যা আপনি ভাঙ্গতে চান এবং এতে আপনাকে নতুন লাইন লাগবে না। এক্ষেত্রে আপনি স্ট্রিং কনটেনটেশন ব্যবহার করতে পারেন।

func main(){
    multiline := "line " +
            "by line " +
            "and line " +
            "after line"

    fmt.Print(multiline) // No new lines here
}

যেহেতু স্ট্রিংকে "" স্ট্রিংটি আখ্যায়িত করা হয় আক্ষরিক পলায়নের ব্যাখ্যা দেওয়া হবে।

func main(){
    multiline := "line " +
            "by line \n" +
            "and line \n" +
            "after line"

    fmt.Print(multiline) // New lines as interpreted \n
}

12

যান এবং বহু লাইন স্ট্রিং

পিছনে টিক্স ব্যবহার করে আপনার একাধিক স্ট্রিং থাকতে পারে:

package main

import "fmt"

func main() {

    message := `This is a 
Multi-line Text String
Because it uses the raw-string back ticks 
instead of quotes.
`

    fmt.Printf("%s", message)
}

ডাবল উদ্ধৃতি (") বা একক উদ্ধৃতি প্রতীক (') ব্যবহার না করে স্ট্রিংয়ের শুরু এবং শেষের সংজ্ঞা দিতে ব্যাক-টিক ব্যবহার করুন। তারপরে আপনি এটি লাইন জুড়ে মোড়ানো করতে পারেন।

আপনি যদি স্ট্রিংটি ইনডেন্ট করেন তবে মনে রাখবেন যে সাদা স্থানটি গণনা করবে।

দয়া করে খেলার মাঠটি পরীক্ষা করে দেখুন এবং এটি দিয়ে পরীক্ষা-নিরীক্ষা করুন।


4

আপনি চারপাশে content with এর মতো সামগ্রী রাখতে পারেন, পছন্দ করুন

var hi = `I am here,
hello,
`

3

আপনাকে ফর্ম্যাটিং এবং লাইন স্পেসিংয়ের ক্ষেত্রে খুব সাবধানতা অবলম্বন করতে হবে, সমস্ত কিছু গণনা করা হয় এবং এখানে একটি কার্যকরী নমুনা রয়েছে, এটি চেষ্টা করুন https://play.golang.org/p/c0zeXKYlmF

package main

import "fmt"

func main() {
    testLine := `This is a test line 1
This is a test line 2`
    fmt.Println(testLine)
}


0

আমার জন্য এটিই আমি ব্যবহার করি যদি যোগ \nকরা কোনও সমস্যা না হয়।

fmt.Sprintf("Hello World\nHow are you doing today\nHope all is well with your go\nAnd code")

অন্যথায় আপনি এটি ব্যবহার করতে পারেন raw string

multiline := `Hello Brothers and sisters of the Code
              The grail needs us.
             `
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.