【问题标题】:create a text file using two different strings in UWP C#在 UWP C# 中使用两个不同的字符串创建一个文本文件
【发布时间】:2021-01-22 16:54:43
【问题描述】:

我想要

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

string1 包含:data1 \n data2 \n data3 \n data4 \n data5

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

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

【问题讨论】:

  • var lines = string1.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Zip(string2.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries), (x, y) => $"{x.Trim()} - {y.Trim()}")); await FileIO.WriteLinesAsync(file, lines);
  • 非常感谢兄弟..这工作正常:)

标签: c# text uwp uwp-xaml


【解决方案1】:

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

鉴于您已将字符串保存到文本文件,问题在于它不是您要保存的字符串,您的问题实际上是如何从两个给定的输入字符串生成所需的输出字符串.

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

给定两个字符串

"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);

【讨论】:

  • 嘿,非常感谢您的详细解释,我很感激 :)。是的,我搞砸了这个问题下次会记住这一点。
  • 很高兴为您提供帮助。如果这回答了您的问题,请考虑将其标记为已接受
  • WriteTextAsync 不起作用,因此我对其进行了编辑并接受了它作为答案
  • @Faraazbhilwade 谢谢。接得好。那是我的复制粘贴错误。我不确定您的编辑为何被拒绝,但我已经解决了。
猜你喜欢
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多