繁体   English   中英

合并文字档名称

[英]Combining text files name

我有一个清单。

List<string> slots = HexStringToGenerateFiles(weaponStorageEntity.Slot);

我正在使用foreach循环检索列表,并同时进行了一些转换。

string slotnumber = "";
string ibuttonslot = "";
foreach (string slot in slots)
{
 slotnumber += slot;
 ibuttonslot = ByteOperation.ReverseString((Convert.ToString(1 << ((Int32.Parse(slotnumber)) - 1), 2).PadLeft(16, '0')));
}

然后,将输出另存为文本文件的名称。

  CreateFile(String.Format("{0}\\B_{1:X16}.TXT",
                                   userDir,
                                   ibuttonslot,
                                   ));

如果我有3个插槽,那么我的输出将有3个文本文件。 但是,我希望将其合并为一个文本文件。 我的输出如下所示。

B_10000000.TXT

B_01000000.TXT

B_00100000.TXT

我想要的输出是

B_11100000.TXT

如果您的插槽编号分别为“ 1”,“ 2”,“ 3”,...,并希望产生在相应插槽中代表“ 1”的文件的名称,那么对于“ 1 3”会是10100000 ...那么您可以使用类似以下的内容:

var slots = new[] { "1" };
var number = 0; 
foreach (var s in slots)
{
    int slotNumber;
    if (!Int32.TryParse(s, out slotNumber)) continue;

    var slot = (int)Math.Pow(2, slotNumber - 1);
    number |= slot;
}

var fileName = Convert.ToString(number, 2).PadLeft(16, '0');
Console.WriteLine(fileName); //output is 0000000000000101

然后还原此字符串(在您的代码中为ByteOperation.ReverseString)。

如果要合并两个文件的文本,则可以使用File.ReadAllLines(string)方法并合并输出,例如

        List<string> contents = System.IO.File.ReadAllLines(firstfile).ToList();
        contents.AddRange(System.IO.File.ReadAllLines(secondfile));

您可以尝试以下方法来组合名称:

string in1 = "B_10000000.TXT";
string in2 = "B_01000000.TXT";
string in3 = "B_00100000.TXT";
char[] charsInName = in1.ToCharArray();
for (int i = 0; i < charsInName.Length-1; i++)
{
    if (charsInName[i] != in2[i] && charsInName[i] != in3[i])
        charsInName[i] = charsInName[i];
    else if (charsInName[i] != in2[i])
        charsInName[i] = in2[i];
    else if (charsInName[i] != in3[i])
        charsInName[i] = in3[i];
}
string outPutName = String.Join("", charsInName);// will be B_11100000.TXT

或者可以使用LINQ:

var result = in1.Select(
    (x, y) => x != in2[y] && x != in3[y] ? x :
    x != in2[y] ? in2[y] : 
    x != in3[y] ? in3[y] : x);
string outPutName = String.Join("", result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM