(आप कैसे एक संपादक में रिक्त स्थान के लिए टैब में परिवर्तित करने के लिए देख रहे हैं, मेरा उत्तर के अंत में देखें)
लगभग 8 साल का सवाल, लेकिन मुझे हाल ही में रिक्त स्थान वाले टैब को प्रतिस्थापित करने की आवश्यकता है।
समाधान के साथ 4 या 8 रिक्त स्थान के साथ टैब को प्रतिस्थापित करता है।
तर्क इनपुट स्ट्रिंग, एक समय में एक वर्ण के माध्यम से पुनरावृत्त करता है और आउटपुट स्ट्रिंग में वर्तमान स्थिति (कॉलम #) का ट्रैक रखता है।
- यह
\t
(टैब वर्ण) का सामना करना पड़ता है - अगले टैब स्टॉप ढूँढता है, की गणना करता है कि कितने रिक्त स्थान यह अगले टैब बंद करने के लिए मिल की जरूरत है, रिक्त स्थान की संख्या के साथ उन \ t बदल देता है।
- यदि
\n
(नई लाइन) - इसे आउटपुट स्ट्रिंग में जोड़ता है और स्थिति पॉइंटर को नई लाइन पर रीसेट करता है। विंडोज़ पर नई लाइनें \r\n
हैं और यूनिक्स (या स्वाद) पर \n
का उपयोग करें, इसलिए मुझे लगता है कि यह दोनों प्लेटफार्मों के लिए काम करना चाहिए। मैंने विंडोज़ पर परीक्षण किया है, लेकिन यूनिक्स को आसान नहीं है।
- कोई अन्य पात्र - इसे आउटपुट स्ट्रिंग में जोड़ता है और स्थिति को बढ़ाता है।
।
using System.Text;
namespace CSharpScratchPad
{
class TabToSpaceConvertor
{
static int GetNearestTabStop(int currentPosition, int tabLength)
{
// if already at the tab stop, jump to the next tab stop.
if ((currentPosition % tabLength) == 1)
currentPosition += tabLength;
else
{
// if in the middle of two tab stops, move forward to the nearest.
for (int i = 0; i < tabLength; i++, currentPosition++)
if ((currentPosition % tabLength) == 1)
break;
}
return currentPosition;
}
public static string Process(string input, int tabLength)
{
if (string.IsNullOrEmpty(input))
return input;
StringBuilder output = new StringBuilder();
int positionInOutput = 1;
foreach (var c in input)
{
switch (c)
{
case '\t':
int spacesToAdd = GetNearestTabStop(positionInOutput, tabLength) - positionInOutput;
output.Append(new string(' ', spacesToAdd));
positionInOutput += spacesToAdd;
break;
case '\n':
output.Append(c);
positionInOutput = 1;
break;
default:
output.Append(c);
positionInOutput++;
break;
}
}
return output.ToString();
}
}
}
बुला कोड की तरह
string input = "I\tlove\tYosemite\tNational\tPark\t\t,\t\t\tGrand Canyon,\n\t\tand\tZion";
string output = CSharpScratchPad.TabToSpaceConvertor.Process(input, 4);
आउटपुट स्ट्रिंग होगा मूल्य
I love Yosemite National Park , Grand Canyon,
and Zion
मिलेगा मैं कैसे एक संपादक में रिक्त स्थान के लिए टैब में परिवर्तित?
यदि आप इस प्रश्न पर ठोकर खा रहे हैं क्योंकि आपको संपादकों में रिक्त स्थान पर टैब को कन्वर्ट करने का विकल्प नहीं मिला (जैसे मैंने किया और इसे करने के लिए अपनी खुद की उपयोगिता लिखने का विचार किया), यहां वह विकल्प है जहां विकल्प स्थित है विभिन्न संपादकों -
Notepad++: Edit > Blank Operations > TAB to Space
Visual Studio: Edit > Advanced > Untabify Selected Lines
SQL Management Studio: Edit > Advanced > Untabify Selected Lines
यहां कुछ उत्तर टैब की अवधारणा की जानकारी नहीं है बंद हो जाता है (वैसे, यह भी सीपीयू कि में कुशल यह विशाल तार recopy नहीं करता है) (http देखना : //www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Stops.html और http://www.jwz.org/doc/tabs-vs-spaces.html)। @कल, निक-मैककोइन और उपयोगकर्ता 275640 सही उत्तर हैं। – Jonke
@ जोन्के ने 4 या 8 रिक्त स्थान के साथ टैब स्टॉप को सही ढंग से निर्धारित करने के लिए एक नया समाधान पोस्ट किया। – HappyTown