স্ট্রিং সি # তে লাইন ব্রেকগুলি প্রতিস্থাপন করুন


512

আমি কিভাবে সি # তে স্ট্রিংয়ের মধ্যে লাইন ব্রেকগুলি প্রতিস্থাপন করতে পারি?


2
দয়া করে আমাদের আরও বলুন: আপনার কাছে "লাইন ব্রেক" কী? আপনি কি তাদের সাথে প্রতিস্থাপন করতে চান?
জে বাজুজি

হা হা। আপনার পোস্ট আমাকে সাহায্য করেছে।
রবিশা

উত্তর:


715

সঙ্গে প্রতিস্থাপন ব্যবহার করুন Environment.NewLine

myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;

অন্যান্য পোস্টে উল্লিখিত হিসাবে, যদি স্ট্রিংটি অন্য পরিবেশ (ওএস) থেকে আসে তবে আপনাকে নতুন লাইন নিয়ন্ত্রণের অক্ষরগুলির নির্দিষ্ট পরিবেশের প্রয়োগটি প্রতিস্থাপন করতে হবে ।


8
প্রথম এটি আমার পক্ষে কাজ করে নি। কিছু গবেষণা করার পরে, আমি সমাধানটি পেয়েছি: আমাকে 'সিস্টেম ব্যবহার করে' ব্যবহার করতে হয়েছিল; বা 'সিস্টেম.ইনোভায়রন. নিউলাইন'
স্মোল্লা

12
সমস্ত নিউলাইন অক্ষর সরান নি। এই স্ট্রিংটি ব্যবহার করে দেখুন "\ n \ r \ n আমার বার্তা \ r \ n \ n \ r \ n এটি। \ N \ n \ r \ n"
শক্তি প্রকাশ সিং

13
সাধারণভাবে, আমি এই সমাধানটি পছন্দ করি। তবে খেয়াল করুন যে এমনকি একই ওএসেও প্রকৃত নিউলাইনগুলি মেলে না। প্রসেসিং কেন এসকিউএল ফিরিয়েছিল তা আমার সাথে ঘটেছিল। নতুন লাইনগুলি \ n ছিল, যখন পরিবেশ.নিউলাইন \ r \ n। ফলাফলটি কিছুই মিলেনি তাই নতুন লাইনগুলি রয়ে গেল lines
ডোনা

@ দোনো> এসকিউএল ডেটা কোথা থেকে আসে? সম্ভবত বাইরের উত্স থেকে নতুন লাইনগুলি ইউনিক্সের সাথে কাজ করে। এটি ওএস বা এই পদ্ধতির সাথে নয়, ডেটা ফর্ম্যাট নিয়ে সমস্যা ...
লরেন্ট এস

স্ট্রিং ক্লাসের এটি স্ট্যাটিক পদ্ধতির একটি হওয়া উচিত। .NET নিজেই একটি স্ট্রিংয়ের উত্স লাইন বিরতির বিন্যাস সনাক্ত করতে এবং এটিকে পরিবেশে রূপান্তর করতে সক্ষম হতে হবে
e নিউলাইন

442

এখনও অবধি পোস্ট করা সমাধানগুলি কেবলমাত্র প্রতিস্থাপন করুন Environment.NewLineবা প্রতিস্থাপনের স্ট্রিংয়ে লাইন ব্রেক থাকলে তারা ব্যর্থ হয় কারণ তারা string.Replaceএকাধিকবার কল করে।

এখানে একটি সমাধান যা স্ট্রিংয়ের উপরে কেবল একটি পাসে তিনটি প্রতিস্থাপনের জন্য একটি নিয়মিত অভিব্যক্তি ব্যবহার করে। এর অর্থ এই যে প্রতিস্থাপনের স্ট্রিংয়ে নিরাপদে লাইন বিরতি থাকতে পারে।

string result = Regex.Replace(input, @"\r\n?|\n", replacementString);

3
সুতরাং আপনার বক্তব্যটি রিজেক্স করা হচ্ছে ep পুনঃস্থাপন (ইনপুট, @ "[\ r \ n] +", রিপ্লেসমেন্ট স্ট্রিং) একই কাজটি সম্পাদন করবে না?
ফ্লেমবাড

7
@ ফ্লেমেবাউড নং, যদি পরপর একাধিক লাইন বিচ্ছিন্ন হয় তবে তা ভিন্ন ফলাফল আনবে। "\ r \ n? |। n" প্রতিটি লাইন বিরতি প্রতিস্থাপন করবে যখন "[\ r \ n] +" যে কোনও সংখ্যক লাইন ব্রেকের জন্য একটি একক প্রতিস্থাপন করবে।
ডেভিড হ্যামন্ড

একাধিক লাইন বিরতি নিয়ে উদ্বিগ্নদের জন্য: / (\ r \ n? | \ N) / জিএম
ববিএ

4
আপনি যদি বিভিন্ন ওএস থেকে আসতে পারে এমন স্ট্রিংয়ে লাইন ব্রেকটি সরাতে চান তবে এটি আসলে সঠিক সমাধান। ভালো উদাহরণ হ'ল জেএসওএন বিন্যাস ting +1
বাসটিয়েন ভান্ডামমে

1
যদি ভার্ব্যাটিম স্ট্রিং (@ উপসর্গ) ব্যবহার না করা হয় তবে আপনার যেখানেই ব্যবহৃত হয় সেখানে সারিবদ্ধভাবে দুটি ব্যাকস্ল্যাশ লাগানো দরকার, সুতরাং উপরের @ চিহ্ন_বায়ারদের উত্তর এখনও সঠিক is @ উপসর্গটি এটিকে তৈরি করে যাতে ব্যাকস্ল্যাশ স্ট্রিংয়ের একটি অংশ যা রেੇেক্সের জন্য এটিকে পলায়ন চরিত্র হিসাবে ব্যবহার করা উচিত।
কर्क লিমোহন

173

The.Anyi.9 এর উত্তর বাড়ানোর জন্য, আপনার সাধারণ ব্যবহারে বিভিন্ন ধরণের লাইন ব্রেক সম্পর্কে সচেতন হওয়া উচিত । আপনার ফাইলটি যেখান থেকে উত্সিত হয়েছে তার উপর নির্ভরশীল, আপনি সমস্ত বিকল্পটি ধরছেন কিনা তা নিশ্চিত করার দিকে নজর দিতে পারেন ...

string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);

তোমাকে যেতে হবে ...


6
প্রথমে আমি পরিবেশের জিনিসটি আরও ভাল পছন্দ করেছি তবে স্ট্রিং যদি সিস্টেম থেকে এটির কাজটি না করে আসে তবে এটি কাজ করবে না। +1
ফ্লো

1
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);যথেষ্ট না ?
টমাস আইয়ুব

5
না, কারণ আপনার যদি থাকে তবে আপনি \r\nপ্রতিস্থাপনের স্ট্রিংয়ের সাথে দু'বার শেষ করবেন - আদর্শ নয়।
জেম্বি শিপ

1
আপনার স্ট্রিং আক্ষরিক দরকার নেই? স্ট্রিং সরানো ব্রেকস = লাইন। রিপ্লেস (@ "\ r \ n", রিপ্লেস উইথ)। রিপ্লেস (@ "\ n", রিপ্লেস উইথ)। রিপ্লেস (@ "\ আর", রিপ্লেস উইথ);
শন দোতে

2
@ শ্যাশনডোটির দরকার নেই, আমরা ব্যাকস্ল্যাশ এবং চিঠির ক্রমগুলি নয়, নিয়ন্ত্রণের অক্ষরগুলি প্রতিস্থাপন করতে চাই।
এন কুদ্রিভটসেভ

38

আমি যখন স্ট্রিংয়ের জন্য একটি নতুন লাইন toোকাতে চাইতাম তখন আমি পরিবেশ.নিউলাইনটি ব্যবহার করতাম তবে স্ট্রিং থেকে সমস্ত নিউলাইনগুলি সরিয়ে ফেলতাম না।

আপনার প্ল্যাটফর্মের উপর নির্ভর করে আপনার বিভিন্ন ধরণের নিউলাইন থাকতে পারে তবে একই প্ল্যাটফর্মের ভিতরেও প্রায়শই বিভিন্ন ধরণের নিউলাইন ব্যবহার করা হয়। বিশেষত ফাইল ফর্ম্যাট এবং প্রোটোকল নিয়ে কাজ করার সময়।

string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}

এটিই কেবলমাত্র আমার জন্য কাজ করেছিল যখন আমি একটি পুনরুদ্ধারকৃত ওয়েব পৃষ্ঠা কোডটি একটি লাইনে ভেঙে দিতে চেয়েছিলাম (রেজেক্স নিদর্শনগুলি সহজতর করার জন্য)।
পা বাল্টজারসেন

সম্পূর্ণরূপে ব্রায়ান আর বন্ডির সাথে একমত। করিনের প্রস্তাবিত সমাধান এবং এতোটুকু আপত্তিযুক্ত সমাধানটি খুব নির্বোধ, কমপক্ষে।
ক্যালিফ

18

যদি আপনার কোডটি বিভিন্ন পরিবেশে চলার কথা মনে হয়, তবে আমি Environment.NewLineধ্রুবকটি ব্যবহার করা বিবেচনা করব , কারণ এটি newlineনির্দিষ্ট পরিবেশে বিশেষত ব্যবহৃত হয়।

line = line.Replace(Environment.NewLine, "newLineReplacement");

তবে, আপনি যদি অন্য কোনও সিস্টেমে উত্পন্ন কোনও ফাইল থেকে পাঠ্যটি পান তবে এটি সঠিক উত্তর নাও হতে পারে এবং অন্য সিস্টেমে নতুন লাইন ধ্রুবকটি ব্যবহার করা উচিত তবে তা প্রতিস্থাপন করা উচিত। এটি সাধারণত হবে \nবা \r\n


প্রতিস্থাপন স্থানে ঘটে না হওয়ায় আপনাকে এটিকে আবার আসল ভেরিয়েবলটিতে পুনরায় নিয়োগ করতে হবে।
tvanfosson

@ ড্রিসস আমি জানতে চাই আপনি কীভাবে একটি নতুন নতুন লাইন ধ্রুবক বাছাই করবেন যখন আপনার কোনও ধারণাই নেই যে কোনও ফাইলটি কোন সিস্টেম থেকে এসেছে ... এই সমাধানটি সত্যই ইউনিভার্সাল বলে মনে হচ্ছে।
ক্যালিফ

14

ভুলে যাবেন না যে প্রতিস্থাপনটি স্ট্রিংটিতে প্রতিস্থাপনটি করে না, তবে পরিবর্তিত অক্ষরগুলির সাথে একটি নতুন স্ট্রিং প্রদান করে। নিম্নলিখিতগুলি লাইন ব্রেকগুলি সরিয়ে ফেলবে (সেগুলি প্রতিস্থাপন করবে না)। আমি @ ব্রায়ান আর বন্ডির পদ্ধতিটি যদি অন্য কোনও কিছু দিয়ে প্রতিস্থাপন করে তবে সম্ভবত এটি কোনও এক্সটেনশন পদ্ধতি হিসাবে মোড়ানো থাকত use প্রতিস্থাপন বা প্রদত্ত এক্সটেনশন পদ্ধতিগুলির কল করার আগে প্রথমে নাল মানগুলি পরীক্ষা করে দেখুন।

string line = ...

line = line.Replace( "\r", "").Replace( "\n", "" );

এক্সটেনশন পদ্ধতি হিসাবে:

public static class StringExtensions
{
   public static string RemoveLineBreaks( this string lines )
   {
      return lines.Replace( "\r", "").Replace( "\n", "" );
   }

   public static string ReplaceLineBreaks( this string lines, string replacement )
   {
      return lines.Replace( "\r\n", replacement )
                  .Replace( "\r", replacement )
                  .Replace( "\n", replacement );
   }
}

''সি # তে থাকতে পারে না - খালি চর হিসাবে কোনও জিনিস নেই। '\0'পরিবর্তে কাজ করবে ?
শেভেক

1
@ শেভেক - স্রেফ ভুল উক্তি ব্যবহার করেছেন। যেদিন আমি এটির উত্তর দিয়েছি সেদিন অবশ্যই জাভাস্ক্রিপ্টের মোটামুটি পরিমাণে করা উচিত।
tvanfosson

@ ক্যালিফ - এটি সমতুল্য, এর চেয়ে ভাল নয়।
tvanfosson

2
আপনি এখানে যে ভুল করেছেন তা এটি আরও ভাল প্রমাণ করে। বেশিরভাগ সংস্থাগুলির জন্য আমি কাজ করেছি যার কোডিং স্ট্যান্ডার্ড রয়েছে - হারডকোড লিটারেলগুলি ব্যবহার করবেন না।
ক্যালিফ

2
@ ক্যালিফ আমার যে "ভুল" করেছেন তা ইন্টেলিসেন্সের সাথে কোনও আইডিইতে তৈরি করা হত না বা এটি সংকলনও করা হত না। যদি আপনি string.Emptyএটির চেয়ে ভাল মনে করেন তবে তা যেকোন উপায়েই ব্যবহার করুন।
tvanfosson

10

লাইন ব্রেকগুলির সমস্ত সম্ভাব্য উপায়গুলি (উইন্ডোজ, ম্যাক এবং ইউনিক্স) প্রতিস্থাপন করা হয়েছে তা নিশ্চিত করার জন্য আপনার ব্যবহার করা উচিত:

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');

এবং এই ক্রমে, অতিরিক্ত লাইন ব্রেক না করার জন্য, যখন আপনি লাইন শেষের অক্ষরের কিছু সংমিশ্রণ পান।


8

আপনি যদি নতুন লাইনগুলি "পরিষ্কার" করতে চান, তবে রেগেক্স ব্যবহার করে ফ্লেমবড মন্তব্যটি @"[\r\n]+"সেরা পছন্দ।

using System;
using System.Text.RegularExpressions;

class MainClass {
  public static void Main (string[] args) {
    string str = "AAA\r\nBBB\r\n\r\n\r\nCCC\r\r\rDDD\n\n\nEEE";

    Console.WriteLine (str.Replace(System.Environment.NewLine, "-"));
    /* Result:
    AAA
    -BBB
    -
    -
    -CCC


    DDD---EEE
    */
    Console.WriteLine (Regex.Replace(str, @"\r\n?|\n", "-"));
    // Result:
    // AAA-BBB---CCC---DDD---EEE

    Console.WriteLine (Regex.Replace(str, @"[\r\n]+", "-"));
    // Result:
    // AAA-BBB-CCC-DDD-EEE
  }
}

বেশিরভাগ ক্ষেত্রে নতুন লাইনের প্রতিস্থাপনের সেরা উত্তর answer
শাহবাজ আহমদ

এই দরকারী নমুনা কোড জন্য ধন্যবাদ। আমি এই sytnax- এর মাধ্যমে স্থির হয়েছি: রেজেজ্স R রিপ্লেস (str, @ "[\ r \ n] +", "-")
সেদাত কুমকু

6

আমার \r\nপ্রকৃত ক্যারেজ রিটার্ন এবং লাইন ফিডের \tসাথে প্রতিস্থাপন এবং একটি প্রকৃত ট্যাব দিয়ে প্রতিস্থাপন করা দরকার । সুতরাং আমি নিম্নলিখিত নিয়ে এসেছি:

public string Transform(string data)
{
    string result = data;
    char cr = (char)13;
    char lf = (char)10;
    char tab = (char)9;

    result = result.Replace("\\r", cr.ToString());
    result = result.Replace("\\n", lf.ToString());
    result = result.Replace("\\t", tab.ToString());

    return result;
}

6

কেন না উভয়?

string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);

দ্রষ্টব্য:strin আপনার ইনপুট স্ট্রিংয়ের নামটি প্রতিস্থাপন করুন।



2

.পরিবর্তন () পদ্ধতিটি ব্যবহার করুন

Line.Replace("\n", "whatever you want to replace with");

2

লাইনব্রেকগুলি নিরাপদে প্রতিস্থাপনের সেরা উপায় is

yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n")             //handling mac linebreaks

এটি কেবল লাইনব্রেক হিসাবে \ n (যেমন লাইনফিড) সহ একটি স্ট্রিং তৈরি করতে পারে। এই কোডটি মিশ্র লাইনব্রেকগুলিও ঠিক করতে কার্যকর।


2

যেহেতু নতুন লাইনটি সীমিত করা যায় \n, \rএবং \r\n, প্রথমে আমরা প্রতিস্থাপন করব \rএবং এর \r\nসাথে করব \nএবং তারপরেই ডাটা স্ট্রিংটি বিভক্ত করব।

নিম্নলিখিত লাইনগুলি parseCSVপদ্ধতিতে যাওয়া উচিত :

function parseCSV(data) {
    //alert(data);
    //replace UNIX new lines
    data = data.replace(/\r\n/g, "\n");
    //replace MAC new lines
    data = data.replace(/\r/g, "\n");
    //split into rows
    var rows = data.split("\n");
}

0
string s = Regex.Replace(source_string, "\n", "\r\n");

অথবা

string s = Regex.Replace(source_string, "\r\n", "\n");

আপনি কোন পথে যেতে চান তার উপর নির্ভর করে

আশা করি এটি সাহায্য করে।


0

অন্য বিকল্পটি হল StringReaderপ্রশ্নে একটি স্ট্রিং তৈরি করা । পাঠকের উপর, .ReadLine()একটি লুপে করুন। তারপরে আপনার লাইনগুলি পৃথক হয়ে গেছে, তাদের (সামঞ্জস্যপূর্ণ বা অসামঞ্জস্যপূর্ণ) বিভাজকগুলি যাই হোক না কেন। এটির সাথে আপনি নিজের ইচ্ছামতো এগিয়ে যেতে পারেন; একটি সম্ভাবনা হ'ল একটি ব্যবহার করা StringBuilderএবং .AppendLineএটিতে কল করা।

সুবিধাটি হ'ল, আপনি কাঠামোটিকে "লাইন ব্রেক" গঠনের সিদ্ধান্ত নিতে দিন।


0

আপনি যদি কেবল নতুনলাইনগুলি প্রতিস্থাপন করতে চান:

var input = @"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";
var match = @"[\\ ]+";
var replaceWith = " ";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);
Console.WriteLine("output: " + x);

আপনি যদি নতুন লাইন, ট্যাব এবং সাদা স্থানগুলি প্রতিস্থাপন করতে চান:

var input = @"sdfhlusdkuidfs\r\ndfgdgfd";
var match = @"[\\s]+";
var replaceWith = "";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input, match, replaceWith);
Console.WriteLine("output: " + x);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.