在 UWP C# 中使用两个不同的字符串创建一个文本文件

create a text file using two different strings in UWP C#

我要

我想使用两个不同的字符串在 c# UWP 中创建一个 .txt 文件。

字符串1包含:数据1\n数据2\n数据3\n数据4\n数据5

string2 包含:dataA\n dataB\n dataC\n dataD\n dataE

我希望文本文件看起来像 NewTextUWP

我试过了

private async void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
    {
        FolderPicker openFileDialog = new FolderPicker
        {
            SuggestedStartLocation = PickerLocationId.Desktop,
            ViewMode = PickerViewMode.List
        };
        openFileDialog.FileTypeFilter.Add(".txt");
        StorageFolder destinationfolder = await openFileDialog.PickSingleFolderAsync();
        StorageFile file = await destinationfolder.CreateFileAsync("newtextUWP.txt", CreationCollisionOption.ReplaceExisting);
        await FileIO.WriteTextAsync(file, string1 + string2);
    }

我得到的输出是NewTextUWP

感谢任何形式的帮助,谢谢。

将您要解决的问题的逻辑核心与根本不相关或已经解决的任何琐碎和附带的周围细节区分开来总是很有价值的。

因为你已经将一个字符串保存到一个文本文件中,问题是它不是你想要保存的字符串,你的问题实际上是如何从给定的两个字符串中生成所需的输出字符串输入字符串。

换句话说,写入文本文件并不是问题的一部分,实际上相当于以下内容。

给定两个字符串

"data1 \n data2 \n data3 \n data4 \n data5" 

"dataA \n dataB \n dataC \n dataD \n dataE" 

计算由 '\n' 以成对方式组合它们的子部分产生的字符串。即

 "data1 - dataA \n data2 - dataB \n data3 - dataC \n data4 - dataD \n data5 - dataE".

首先,我们将通过在此指定的分隔符上拆分每个字符串,将其转换为字符串集合。

var first = string1.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

var second = string2.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

注意我们如何使用 .NET 字符串提供的内置 Split 方法,它允许我们通过指定分隔符数组将任何字符串转换为其子字符串的集合(我们只关心'\n' 在这种情况下)以及是否应从结果中排除空字符串。

现在我们有两个字符串序列,而不是两个字符串,我们可以组合它们对应的元素来生成第三个字符串序列,其中每个元素代表一行所需的结果。

var lines = first.Zip(second, (beginWith, endWith) => $"{beginWith} - {endWith}");

正如我们使用内置的 Split 方法为所有 .NET 字符串提供分解成子字符串序列的能力一样,我们利用所有的内置 Zip 方法它为所有 .NET 序列提供了与另一个序列成对组合的能力,以获得我们想要的单行序列。提供给 Zip 的第一个参数指定要组合的序列,第二个参数是指定如何组合相应元素对的函数。

现在我们有了序列

"data1 - dataA", "data2 - dataB", "data3 - dataC", "data4 - dataD", "data5 - dataE"

在变量 lines 中,我们只需要将该字符串序列组合成一个单独的 '\n' 分隔字符串,我们可以将其交给 FileIO.WriteTextAsync 方法进行输出,从而完成我们的解决方案。

var result = string.Join("\n", lines);

await FileIO.WriteTextAsync(file, result);

与我们之前的步骤一样,我们利用内置的 .NET 功能,即 string 类型的 Join 方法,将我们的行序列组合成一个带有指定的分隔符分隔它们。

请注意,我们可以跳过此步骤,提高简洁性和清晰度,方法是使用 FileIO.WriteLinesAsync 将一系列字符串写入文件,每个字符串之间换行,这恰好是我们想要的

await FileIO.WriteLinesAsync(file, lines);

综合起来

var first = string1.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

var second = string2.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

var lines = first.Zip(second, (beginWith, endWith) => $"{beginWith} - {endWith}");

await FileIO.WriteLinesAsync(file, lines);