从文件中打印出字符串的一部分,从开始序列到停止序列

时间:2014-09-11 14:00:07

标签: c# string

这是我的第一个问题,所以如果我违反了一些规则,我会道歉。我也为我平庸的英语道歉。

我的任务是使用字符串从另一个文件写入文件。它需要在开始序列和停止序列之间打印出所有内容,并忽略其他所有内容。它还应计算所有字符,单词和消息数,但仅限于开始和停止之间。启动顺序为ASCII 27(ESC)和ASCII 02(STX),停止为27 AND 02。

所以我的问题是在一个字符串中有单独的消息。一两个,没问题,但我不知道如何找到多个序列。

如果只有一个或两个,我可以使用string.IndexOf(start / stop)和LastIndexOf()。我已经尝试使用string [] array = string.Split()来运行整个字符串,但随后我将序列分开。

有谁知道如何解决这个问题?很抱歉没有代码的问题,但我刚刚开始沮丧的愤怒。如果我在这里做错了什么,请给我一些反馈意见,以便下次我能说得更好:)

2 个答案:

答案 0 :(得分:1)

尝试String.Split的{​​{3}}:

public string[] Split(
    string[] separator,
    StringSplitOptions options
)

我尝试过类似的事情:

string test = "blah blah blahtestblah blahtestblah";
string[] splits = test.Split(new string[] { "test" }, StringSplitOptions.RemoveEmptyEntries);
int nMessages = splits.Length;
int nWords = 0, nLetters = 0;

foreach (string str in splits)
{
    Console.WriteLine(str);

    nWords += str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length;
    nLetters += str.Length;
}
Console.WriteLine("That was {0} messages in {1} words and {2} letters", nMessages, nWords, nLetters);

现在,除了分隔符之外,它会计算所有字符。这也删除了空格,并不考虑它们的消息,也不考虑空白的单词(如双空格的情况)。也许您认为""是一条消息......如果是,请不要使用StringSplitOptions.RemoveEmptyEntries

答案 1 :(得分:1)

托马斯

不确定这是否是最佳方式,但应该能满足您的需求。

const char startChar = (char)27;
const char stopChar = (char)02;

String yourInputString = "asfsdfpasdfiasdfoaisfpaosfiapsfoi";

byte[] array = Encoding.ASCII.GetBytes(yourInputString);

List<byte> buffer = new List<byte>();

for (int i = 0; i < yourInputString.Length; i++)
{
    switch (Convert.ToChar(array[i]))
    {
        case startChar:
            if (buffer.Count> 0)
                WriteBufferToFile(buffer);
            buffer.Add(array[i]);
            break;


        case stopChar:
            buffer.Add(array[i]);
            WriteBufferToFile(buffer);
            break;

        default:
            buffer.Add(array[0]);
            break;
    }
}

希望这有帮助,