Swift - 替换服务器生成的CSV文件中的额外换行符

时间:2017-07-04 08:21:42

标签: swift csv

我为管理员创建了一个统计控制器,用于从数据库中导出后端信息。控制器有几个字段,UIPickers用于过滤数据,还有一个按钮用于向服务器发送请求,其中API(用C#编写)负责导出。

数据当前正导出为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

3 个答案:

答案 0 :(得分:1)

如果要完全删除空行,可以使用简单的字符串替换函数。

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

答案 1 :(得分: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 的更短答案:)

答案 2 :(得分:0)

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