Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C#项目的文本转换为1个文本文件_C# - Fatal编程技术网

将C#项目的文本转换为1个文本文件

将C#项目的文本转换为1个文本文件,c#,C#,所以我正在做谷歌代码Jam,对于他们的新格式,我必须将我的代码作为单个文本文件上传 我喜欢以正确构造的类和多个文件的形式编写代码,即使在时间紧迫的情况下也是如此(我发现我在清晰性和调试速度方面节省的时间比浪费的时间要多。)并且我希望重用通用代码 完成代码后,我必须将多个文件中的一系列类转换为单个文件 目前,我只是手动将所有文件的文本复制并粘贴到一个文件中,然后手动调整用法和名称空间以使其正常工作 有更好的选择吗? 理想情况下,这是一个适合我的工具? 或者,如果我可以实现一些可预测的算法,而不需要

所以我正在做谷歌代码Jam,对于他们的新格式,我必须将我的代码作为单个文本文件上传

我喜欢以正确构造的类和多个文件的形式编写代码,即使在时间紧迫的情况下也是如此(我发现我在清晰性和调试速度方面节省的时间比浪费的时间要多。)并且我希望重用通用代码

完成代码后,我必须将多个文件中的一系列类转换为单个文件

目前,我只是手动将所有文件的文本复制并粘贴到一个文件中,然后手动调整用法和名称空间以使其正常工作

有更好的选择吗? 理想情况下,这是一个适合我的工具?
或者,如果我可以实现一些可预测的算法,而不需要任何手动调整?

这可能不是实现这一点的最佳方法,但这是一种可以满足您需要的算法:

  • 使用”->循环遍历每个文件并获取以“
    开头的每一行,然后将它们写入临时文件/缓冲区
  • 检查重复项并将其删除
  • 获取charsequence“
    名称空间
    ”后第一个“
    {
    ”的位置
  • 获取文件中最后一个“
    }
    ”的位置
  • 将这两个位置之间的文本附加到临时文件/缓冲区中
  • 将第二个文件/缓冲区附加到第一个文件/缓冲区
  • 写出合并的缓冲区

这可能不是实现这一点的最佳方法,但这是一种可以满足您需要的算法:

  • 使用”->循环遍历每个文件并获取以“
    开头的每一行,然后将它们写入临时文件/缓冲区
  • 检查重复项并将其删除
  • 获取charsequence“
    名称空间
    ”后第一个“
    {
    ”的位置
  • 获取文件中最后一个“
    }
    ”的位置
  • 将这两个位置之间的文本附加到临时文件/缓冲区中
  • 将第二个文件/缓冲区附加到第一个文件/缓冲区
  • 写出合并的缓冲区
  • 编写类,使所有“使用”都位于“命名空间”内
  • 编写一个脚本,收集所有*.cs文件并连接它们
  • 编写类,使所有“使用”都位于“命名空间”内
  • 编写一个脚本,收集所有*.cs文件并连接它们

  • 这是非常主观的。我在伪代码中看到的算法如下所示:

    usingsLines = new HashSet<string>();
    newFile = new StringBuilder();
    foreeach (file in listOfFiles)
    {
        var textFromFile = file.ReadToEnd();
        var usingOperators = textFromFile.GetUsings();
        var fileBody = textFromFile.GetBody();
        newFile+=fileBody ;
    }
    newFile = usingsLines.ToString() + newFile;
    // As a result if will have something like this
    // using usingsfromFirstFile;
    // using usingsfromSecondFile;
    // 
    // namespace FirstFileNamespace
    // {
    // ...
    // }
    // 
    // namespace SecondFileNamespace
    // {
    // ...
    // }
    
    usingsLines=newhashset();
    newFile=新的StringBuilder();
    ForEach(列表文件中的文件)
    {
    var textFromFile=file.ReadToEnd();
    var usingOperators=textFromFile.GetUsings();
    var fileBody=textFromFile.GetBody();
    newFile+=文件体;
    }
    newFile=usingsLines.ToString()+newFile;
    //因此,if将有类似的内容
    //使用usingsfromFirstFile;
    //使用usingsfromSecondFile;
    // 
    //命名空间FirstFileNamespace
    // {
    // ...
    // }
    // 
    //命名空间SecondFileNamespace
    // {
    // ...
    // }
    
    但请记住,如果两个不同的名称空间包含相同的类等,则此方法可能会导致名称空间中的冲突。要解决此问题,您需要手动修复它,或者使用
    运算符去除
    ,并对名称空间使用全名

    此外,以下几个链接可能有用: ,
    这是非常主观的。我在伪代码中看到的算法如下所示:

    usingsLines = new HashSet<string>();
    newFile = new StringBuilder();
    foreeach (file in listOfFiles)
    {
        var textFromFile = file.ReadToEnd();
        var usingOperators = textFromFile.GetUsings();
        var fileBody = textFromFile.GetBody();
        newFile+=fileBody ;
    }
    newFile = usingsLines.ToString() + newFile;
    // As a result if will have something like this
    // using usingsfromFirstFile;
    // using usingsfromSecondFile;
    // 
    // namespace FirstFileNamespace
    // {
    // ...
    // }
    // 
    // namespace SecondFileNamespace
    // {
    // ...
    // }
    
    usingsLines=newhashset();
    newFile=新的StringBuilder();
    ForEach(列表文件中的文件)
    {
    var textFromFile=file.ReadToEnd();
    var usingOperators=textFromFile.GetUsings();
    var fileBody=textFromFile.GetBody();
    newFile+=文件体;
    }
    newFile=usingsLines.ToString()+newFile;
    //因此,if将有类似的内容
    //使用usingsfromFirstFile;
    //使用usingsfromSecondFile;
    // 
    //命名空间FirstFileNamespace
    // {
    // ...
    // }
    // 
    //命名空间SecondFileNamespace
    // {
    // ...
    // }
    
    但请记住,如果两个不同的名称空间包含相同的类等,则此方法可能会导致名称空间中的冲突。要解决此问题,您需要手动修复它,或者使用
    运算符去除
    ,并对名称空间使用全名

    此外,以下几个链接可能有用: ,

    也许你可以添加一个生成后事件,它调用批处理文件来查找和连接所有代码文件?这在这里完成,尽管我个人没有检查过。也许你可以添加一个生成后事件,它调用批处理文件来查找和连接所有代码文件?这在这里完成,尽管我个人没有检查过。这是一个很好的选择解决方案,效果非常好。谢谢这是一个很好的解决方案,效果非常好。谢谢