将C#项目的文本转换为1个文本文件
所以我正在做谷歌代码Jam,对于他们的新格式,我必须将我的代码作为单个文本文件上传 我喜欢以正确构造的类和多个文件的形式编写代码,即使在时间紧迫的情况下也是如此(我发现我在清晰性和调试速度方面节省的时间比浪费的时间要多。)并且我希望重用通用代码 完成代码后,我必须将多个文件中的一系列类转换为单个文件 目前,我只是手动将所有文件的文本复制并粘贴到一个文件中,然后手动调整用法和名称空间以使其正常工作 有更好的选择吗? 理想情况下,这是一个适合我的工具?将C#项目的文本转换为1个文本文件,c#,C#,所以我正在做谷歌代码Jam,对于他们的新格式,我必须将我的代码作为单个文本文件上传 我喜欢以正确构造的类和多个文件的形式编写代码,即使在时间紧迫的情况下也是如此(我发现我在清晰性和调试速度方面节省的时间比浪费的时间要多。)并且我希望重用通用代码 完成代码后,我必须将多个文件中的一系列类转换为单个文件 目前,我只是手动将所有文件的文本复制并粘贴到一个文件中,然后手动调整用法和名称空间以使其正常工作 有更好的选择吗? 理想情况下,这是一个适合我的工具? 或者,如果我可以实现一些可预测的算法,而不需要
或者,如果我可以实现一些可预测的算法,而不需要任何手动调整?这可能不是实现这一点的最佳方法,但这是一种可以满足您需要的算法:
- 使用”->循环遍历每个文件并获取以“
开头的每一行,然后将它们写入临时文件/缓冲区
- 检查重复项并将其删除
- 获取charsequence“
”后第一个“名称空间
”的位置{
- 获取文件中最后一个“
”的位置}
- 将这两个位置之间的文本附加到临时文件/缓冲区中
- 将第二个文件/缓冲区附加到第一个文件/缓冲区
- 写出合并的缓冲区
- 使用”->循环遍历每个文件并获取以“
开头的每一行,然后将它们写入临时文件/缓冲区
- 检查重复项并将其删除
- 获取charsequence“
”后第一个“名称空间
”的位置{
- 获取文件中最后一个“
”的位置}
- 将这两个位置之间的文本附加到临时文件/缓冲区中
- 将第二个文件/缓冲区附加到第一个文件/缓冲区
- 写出合并的缓冲区
这是非常主观的。我在伪代码中看到的算法如下所示:
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
// {
// ...
// }
但请记住,如果两个不同的名称空间包含相同的类等,则此方法可能会导致名称空间中的冲突。要解决此问题,您需要手动修复它,或者使用
运算符去除,并对名称空间使用全名
此外,以下几个链接可能有用:
,
也许你可以添加一个生成后事件,它调用批处理文件来查找和连接所有代码文件?这在这里完成,尽管我个人没有检查过。也许你可以添加一个生成后事件,它调用批处理文件来查找和连接所有代码文件?这在这里完成,尽管我个人没有检查过。这是一个很好的选择解决方案,效果非常好。谢谢这是一个很好的解决方案,效果非常好。谢谢