C# 文本文件在同一行中创建/删除文本间距
C# textfile create / remove spacing of texts in same line
我该怎么做才能获得如图所示的右侧输出?请注意,稍后会有很多数据具有这种不一致的对齐方式,是否有任何方法可以将所有文本与调整后的对齐方式一起循环,如图像右侧所示?
您可以使用 Regex 将出现的多个空格(2 个或更多,包括制表符)替换为单个空格。例如,
var result = Regex.Replace(str,"[\t ]{2,}"," ");
空格的常见形式可以分为
- Space
- 制表符(\t)
- 换行(\n)
- Return(\t)
在上面的场景中,您似乎需要用单个空白字符替换所有 Space(2 个或更多)和 Tab 字符(并忽略 NewLine/Return 字符)。为此,您可以使用上面代码中所示的正则表达式
简答,使用 Trim() 或 TrimEnd,但这是我使用我的 Nuget 包完成任务的方式,您可以将其转换为 string.Split()如果你不想使用 Nuget 包:
Nuget 包:
DataJuggler.Core.UltimateHelper(.Net 框架)
DataJuggler.UltimateHelper.Core(.Net 核心)
.Net Framework 显示
// source input
string inputFileText = "blah blah blah blah blah " + Environment.NewLine + "blah blah blah blah blah";
// parse the lines
List<TextLine> lines = WordParser.GetTextLines(inputFileText);
// If the lines collection exists and has one or more items
if (ListHelper.HasOneOrMoreItems(lines))
{
// Iterate the collection of TextLine objects
foreach (TextLine line in lines)
{
// Get the words
List<Word> words = WordParser.GetWords(line.Text);
}
}
然后你可以对每行做你想做的,每行包含一个单词列表(字符串文本)。
以下是 Nuget 包使用的代码,如果您想复制它:
public static List<TextLine> GetTextLines(string sourceText)
{
// initial value
List<TextLine> textLines = new List<TextLine>();
// typical delimiter characters
char[] delimiterChars = Environment.NewLine.ToCharArray();
// local
int counter = -1;
// verify the sourceText exists
if (!String.IsNullOrEmpty(sourceText))
{
// Get the list of strings
string[] linesOfText = sourceText.Split(delimiterChars);
// now iterate the strings
foreach (string lineOfText in linesOfText)
{
// local
string text = lineOfText;
// increment the counter
counter++;
// add every other row
if ((counter % 2) == 0)
{
// Create a new TextLine
TextLine textLine = new TextLine(text);
// now add this textLine to textLines collection
textLines.Add(textLine);
}
}
}
// return value
return textLines;
}
public static List<Word> GetWords(string sourceText, char[] delimeters = null, bool allowEmptyStrings = false)
{
// initial value
List<Word> words = new List<Word>();
// typical delimiter characters
char[] delimiterChars = { ' ','-','/', ',', '.', '\t' };
// if the delimter exists
if (NullHelper.Exists(delimeters))
{
// use these delimters
delimiterChars = delimeters;
}
// verify the sourceText exists
if (!String.IsNullOrEmpty(sourceText))
{
// Get the list of strings
string[] strings = sourceText.Split(delimiterChars);
// now iterate the strings
foreach(string stringWord in strings)
{
// verify the word is not an empty string or a space
if ((allowEmptyStrings) || (TextHelper.Exists(stringWord)))
{
// Create a new Word
Word word = new Word(stringWord);
// now add this word to words collection
words.Add(word);
}
}
}
// return value
return words;
}
我该怎么做才能获得如图所示的右侧输出?请注意,稍后会有很多数据具有这种不一致的对齐方式,是否有任何方法可以将所有文本与调整后的对齐方式一起循环,如图像右侧所示?
您可以使用 Regex 将出现的多个空格(2 个或更多,包括制表符)替换为单个空格。例如,
var result = Regex.Replace(str,"[\t ]{2,}"," ");
空格的常见形式可以分为
- Space
- 制表符(\t)
- 换行(\n)
- Return(\t)
在上面的场景中,您似乎需要用单个空白字符替换所有 Space(2 个或更多)和 Tab 字符(并忽略 NewLine/Return 字符)。为此,您可以使用上面代码中所示的正则表达式
简答,使用 Trim() 或 TrimEnd,但这是我使用我的 Nuget 包完成任务的方式,您可以将其转换为 string.Split()如果你不想使用 Nuget 包:
Nuget 包: DataJuggler.Core.UltimateHelper(.Net 框架)
DataJuggler.UltimateHelper.Core(.Net 核心)
.Net Framework 显示
// source input
string inputFileText = "blah blah blah blah blah " + Environment.NewLine + "blah blah blah blah blah";
// parse the lines
List<TextLine> lines = WordParser.GetTextLines(inputFileText);
// If the lines collection exists and has one or more items
if (ListHelper.HasOneOrMoreItems(lines))
{
// Iterate the collection of TextLine objects
foreach (TextLine line in lines)
{
// Get the words
List<Word> words = WordParser.GetWords(line.Text);
}
}
然后你可以对每行做你想做的,每行包含一个单词列表(字符串文本)。
以下是 Nuget 包使用的代码,如果您想复制它:
public static List<TextLine> GetTextLines(string sourceText)
{
// initial value
List<TextLine> textLines = new List<TextLine>();
// typical delimiter characters
char[] delimiterChars = Environment.NewLine.ToCharArray();
// local
int counter = -1;
// verify the sourceText exists
if (!String.IsNullOrEmpty(sourceText))
{
// Get the list of strings
string[] linesOfText = sourceText.Split(delimiterChars);
// now iterate the strings
foreach (string lineOfText in linesOfText)
{
// local
string text = lineOfText;
// increment the counter
counter++;
// add every other row
if ((counter % 2) == 0)
{
// Create a new TextLine
TextLine textLine = new TextLine(text);
// now add this textLine to textLines collection
textLines.Add(textLine);
}
}
}
// return value
return textLines;
}
public static List<Word> GetWords(string sourceText, char[] delimeters = null, bool allowEmptyStrings = false)
{
// initial value
List<Word> words = new List<Word>();
// typical delimiter characters
char[] delimiterChars = { ' ','-','/', ',', '.', '\t' };
// if the delimter exists
if (NullHelper.Exists(delimeters))
{
// use these delimters
delimiterChars = delimeters;
}
// verify the sourceText exists
if (!String.IsNullOrEmpty(sourceText))
{
// Get the list of strings
string[] strings = sourceText.Split(delimiterChars);
// now iterate the strings
foreach(string stringWord in strings)
{
// verify the word is not an empty string or a space
if ((allowEmptyStrings) || (TextHelper.Exists(stringWord)))
{
// Create a new Word
Word word = new Word(stringWord);
// now add this word to words collection
words.Add(word);
}
}
}
// return value
return words;
}