2017-07-04 36 views
1

我已经创建了统计控制器,供管理员从数据库中导出后端信息。该控制器有几个使用UIPickers过滤数据的字段和一个向服务器发送请求的按钮,其中API(用C#编写)负责导出。Swift - 替换服务器生成的CSV文件中的额外换行符

数据当前正在导出为CSV并添加回我的控制器。问题是附加文件在每行数据后都包含一个额外的换行符。虽然CSV在Windows机器上看起来很完美。

如果这是一个Windows/Unix问题,换行符处理方式不同,我该怎么办才能解决这个问题?我希望所有这些额外的行在用户实际以电子表格形式打开文件之前消失。

在我的Windows机器

Created by: "" 
Created on: "" 

Name,Date,Score 
Jack Sparrow,2017-07-03-14:48:58,80 
Jack Sparrow,2017-07-03-14:49:33,100 

在我的Mac和iPhone

Created by: "" 

Created on: "" 


Name,Date,Score 

Jack Sparrow,2017-07-03-14:48:58,80 

Jack Sparrow,2017-07-03-14:49:33,100 

回答

1

如果您想要一起删除空行,您可以使用简单的字符串替换功能。

let array = string.enumerateLines { line, _ in linesArray.append(line) } 
let result = array.filter { !$0.isEmpty }.joined(separator: "\n") 
+0

谢谢!好的解决方案:-) –

0

我想我们发现了这个问题。在Windows中,换行符等于\r\n,但我需要\n才能使其在Linux/Unix设备上工作。

1

如果你想解决这个快速的Mac/iOS版客户端上,你不关心性能这么多,你可以只通过删除多余的新线重建文件。如果你没有很多行的文件(大概500以上),下一个方法应该可以正常工作并且相对较快。

读取文件转换成字符串:

let fileStr = String.init(contentsOf: yourFileURL) 

获取线组件:

let comps = fileStr.components(separatedBy: CharacterSet.newlines) 

components:separatedBy会给你新的行空字符串。过滤掉空字符串(在这个例子中所有的人,但你可以做任何你需要的):

let fiteredComps = comps.filter { !$0.isEmpty } 

重新构图你串必要的换行字符:

var recomposedString = "" 
for str in filteredComps { 
    recomposedString += str 
    recomposedString += "\n" // or whatever character you need 
} 

或检查出短得多the4kman的回答 :)

+0

感谢您的回复!很高兴知道这确实是可能的。 –