我正在使用我的手机记录一些传感器数据并通过 SQLite 通过 SharkORM(DBAccess) 将其存储在设备上。
我现在想将该数据写入 CSV 文件,但是,我现在有多达 160 万条记录。
目前,我正在遍历 1000 条记录,将它们添加到一个字符串中,最后将它们写出。但是,一定有更好的方法吗?
func writeRawFile()
{
let fileName = "raw"
let DocumentDirURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let fileURL = DocumentDirURL.appendingPathComponent(fileName).appendingPathExtension("csv")
var data = "time,lat,lon,speed,x_acc,y_acc,z_acc,gyro_x,gyro_y,gyro_z,compass,orientation\r\n"
let count = RawReading.query().count()
var counter = 0;
let df = DateFormatter()
df.dateFormat = "y-MM-dd H:m:ss.SSSS"
for i in stride(from:0, to: count, by: 1000)
{
autoreleasepool {
for result in RawReading.query().offset(Int32(i)).limit(1000).fetch()
{
if let raw : RawReading = result as? RawReading
{
if (Double(raw.speed!) > 3.0) //1 Meter per Second = 2.236936 Miles per Hour
{
//print(df.string(from: raw.date!))
data += "\(df.string(from: raw.date!)),\(raw.lat!),\(raw.lon!),\(raw.speed!),\(raw.x!),\(raw.y!),\(raw.z!),\(raw.xx!),\(raw.yy!),\(raw.zz!),\(raw.compass!),\(raw.orientation!)" + "\r\n"
counter += 1
}
}
}
print ("Written \(i) of \(count)")
}
}
print("Count \(count) \(counter)")
//write the file, return true if it works, false otherwise.
do{
try data.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8 )
} catch{
print("error")
}
}
最佳答案
打开FileHandle用于编写,然后分别构建和编写每一行,这样您就不必保留整个文件内容
在内存中:
do {
let file = try FileHandle(forWritingTo: fileURL)
defer { file.closeFile() }
for <... your loop ...> {
let line = ... // build one CSV line
file.write(line.data(using: .utf8)!)
}
} catch let error {
// ...
}
也可以先写入一个临时文件,然后重命名为 实际文件,以避免文件损坏 出错了。
关于 swift : Streaming/Writing out a CSV file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42578607/
问题你能用thin吗?与ActionController::Live实现服务器端事件(SSE)和长轮询?如果是,怎么办?上下文虽然标题是HowtogetRails4ActionController::LivestreamingworkingwithThinandRuby2?AndhowdoThinandPumascalewithlivestreaming?的重复,OP通过问两个问题混淆了水域,这个问题从未得到回答。许多其他帖子建议您可以使用thin对于服务器端事件(sse),如果您通过execthinstart--threaded启动它:DoesHerokusupportActionC
我正在试验Rails4ActionController::Live和ServerSentEvents。我正在使用MRI2.0.0和Puma。就我所见,每个连接的客户端都与服务器保持事件连接。我想知道是否可以在不保持所有响应流运行的情况下利用SSE。Puma使用线程管理多个连接,我想当前连接数是有限制的。如果我想支持成千上万的客户注册到我的Rails应用程序以参加SSE事件的真实场景怎么办?有没有例子?此外,我通常在nginx反向代理后面运行Rails应用程序服务器。它需要任何特定的设置吗? 最佳答案 SSE的构建方式是客户端打开到服
目录步骤安装第二步下载flink第三步安装flink-streaming-patform-web第四步配置flinkweb平台第五步运行demo在Flink学习的入门阶段,非常重要的一个过程就是Flink环境搭建,这是认识FLInk框架的第一步,也是为后续的理论学习和代码练习打下基础。今天加米谷大数据就为大家带来Flink环境搭建的步骤解析,帮助大家一步步来部署好Flink环境。步骤1、使用gitclone到本地后,使用IDEA打开项目2、修改数据库连接flink-streaming-web/src/main/resources/application.properties3、在本地数据库中创
推特的StreamingAPI似乎提供了一种无需不断轮询新数据即可接收实时推文的方法。是否可以使用jQuery(或者可能回退到纯JS)来使用此API?据我所知,jQuery没有内置的方法来使用JSON传输HTTP请求。这是正确的,还是我错过了什么?如果此功能不是内置的,是否有人已经使用插件或示例解决了这个问题?更新:据我所知,HTML5对WebSockets的支持可能是实现这一目标的最佳方法。不幸的是,这意味着主流兼容性至少还需要几年时间。据我所知,这些浏览器版本目前以某种方式支持WebSockets:WebKit5(Safari/Chrome)火狐4IE9(最终)
在Rails3.1中,有一个选项可以启用HTTP流式处理,这样您的页面就可以分块下载。在关于此功能的Railscast中,Ryan建议启用此功能是个好主意,这样您的CSS和JavaScript就可以被拉下,同时页面的其余部分仍在呈现。我一直遵循这样的准则,即在加载所有页面内容后,脚本应位于页面底部,这样可以减少感知加载时间,但这样做不会利用HTTP流式传输。您认为现在最好的做法是什么? 最佳答案 我认为这是一个很好的问题;我觉得有必要到谷歌上寻找答案。将脚本Assets放在页面底部的论据是为了防止阻塞浏览器的渲染器,否则浏览器的渲染
目录SparkStreaming的核心是DStream一、DStream简介二.DStream编程模型三.DStream转换操作SparkStreaming的核心是DStream一、DStream简介1.Spark Streaming提供了一个高级抽象的流,即DStream(离散流)。2.DStream的内部结构是由一系列连续的RDD组成,每个RDD都是一小段由时间分隔开来的数据集。二.DStream编程模型三.DStream转换操作transform()1.在3个节点启动zookeeper集群服务$zkServer.shstart2.启动kafka(3个节点都要)$/opt/module/k
Sparkstreaming在各种流程处理框架生态中占着举足轻重的位置,但是不可避免地也会面对网络波动带来的数据延迟的问题,所以必须要进行增量数据的累加。在更新Spark应用的时候或者其他不可避免的异常宕机的时候,增量累加会带来重复消费的问题,在一些需要严格保证exactonce的场景下,这个时候我们就需要进行离线修复,从而保证exactonce语义,本文将针对这个问题,提供一些常见的解决方案和处理方式。下图中展示了数据延迟的一个场景:在讨论解决消息乱序问题之前,需先定义时间和顺序。在流处理中,时间的概念有两个:Eventtime:Eventtime是事件发生的时间,经常以时间戳表示,并和数据
UE4系列文章目录文章目录UE4系列文章目录前言一、第一种方法:修改配置文件(不得行)二、第二种方法:项目设置(可行)前言我们在运行UE4程序时会遇到警告:预算上的纹理流送池,虽然不影响程序正常运行,但就是看着挺刺眼的。有强迫症的我是在忍不哈,于是决定灭了他_一、第一种方法:修改配置文件(不得行)问了一下度娘:纹理流送是运行时将纹理加载和卸载进出内存的系统,当场景中的纹理流送超过默认值将会产生警告,解决方法有两种:1.通过命令行修改流送池单位;2.通过修改\Engine\Config\ConsoleVariables.ini,修改流送池单位:;TextureStreamingPoolValue
当我将time.Now()编码到JSON对象时,它给出的结果为"2009-11-10T23:00:00Z"但打印时间。现在给出2009-11-1023:00:00+0000UTC。他们为什么不同。什么是T和Z。另外,如何根据this将其转换为swiftNSDate对象?表? 最佳答案 这些值的含义无关紧要,它们是该格式(ISO8601)的一部分。有几种方法可以解决这个问题。一种是为时间或您的结构定义自定义MarshalJSON()方法并使用它来格式化日期,另一种是首先在您的结构中将其表示为字符串,以便当默认实现执行你得到你正在寻找的
在C/C++/Java/Go中,我们使用,来分隔参数:(aint,bint)在ObjectiveC中,我们使用:来表示参数::(int)a:(int)b在Swift中,我们必须同时使用:和,:(a:int,b:int)是否需要冗余? 最佳答案 Swift可能有外部和内部参数名称:(externalinternal:Int)如果没有独特的分隔符,会产生很多歧义。 关于objective-c-为什么Swift函数定义语法是多余的?,我们在StackOverflow上找到一个类似的问题: