2017-11-29 6 views
0

私は8000以上の情報を持つテキストファイルを持っています。私はそれをiOSアプリケーションで使用するためにJSONに解析したいと思います。この種のtxtファイルの解析には約35秒かかりますが、これはユーザーエクスペリエンスには向いていません。jsonにtxtファイルを解析する方法は?

テキストファイルはこのように書き:

TURKIYE;ADANA;ADANA;36,9914194;35,3308285;03:00:00 
TURKIYE;ADANA;ALADAĞ;37,545348;35,394608;03:00:00 
TURKIYE;ADANA;CEYHAN;37,028765;35,8124309;03:00:00 
TURKIYE;ADANA;FEKE;37,814467;35,910391;03:00:00 
TURKIYE;ADANA;İMAMOĞLU;37,2984443;35,6095474;03:00:00 
TURKIYE;ADANA;KARAISALI;37,2758825;35,1268781;03:00:00 
TURKIYE;ADANA;KARATAŞ;36,6649776;35,2587964;03:00:00 

私はちょうど「トルキエ」、「ADANA」、「ALADAĞ」、「緯度」をしたいと「経度」の部分と最後を必要としない「03 :00:00 "の部分です。

編集: 何かについての言及を忘れてしまいます。テキストファイルには第3列が含まれていません。例えば;

AVUSTURYA;HORBRANZ;47,5557073;9,7525947;01:00:00 
AVUSTURYA;HORN;48,66607;15,65716;01:00:00 
AVUSTURYA;IMST;47,24013;10,73954;01:00:00 
AVUSTURYA;IMSTERAU;47,21018;10,70901;01:00:00 

「3番目の列が存在しない場合は、nil value there」のように解析します。

マイTXT解析コードは次のとおりです。

let textFilePath = Bundle.main.path(forResource: "LatLongData", ofType: "txt") 
let fileManager = FileManager.default 

if fileManager.fileExists(atPath: textFilePath!) { 

    do { 
     let fullText = try String(contentsOfFile: textFilePath!, encoding: String.Encoding.utf8) 
     let lines = fullText.components(separatedBy: "\n") as [String] 
      for line in lines { 

       let data = line.components(separatedBy: ";") 
       let locationData = LocationData() 

       if data.first == "TURKIYE" || data.first == "ABD" { 
        locationData.country = data[0] 
        locationData.city = data[1] 
        locationData.district = data[2] 
        locationData.latitude = data[3] 
        locationData.longitude = data[4] 
        locationData.compoundKey = "\(data[0])-\(data[1])-\(data[3])" 
       } else { 
        locationData.country = data[0] 
        locationData.city = data[1] 
        locationData.latitude = data[2] 
        locationData.longitude = data[3] 
        locationData.compoundKey = "\(data[0])-\(data[1])-\(data[3])" 
       } 
       locationData.writeToRealmDB() 
      } 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 

私はこのテキストはiOSアプリで使用するためのJSONに変換することができますどのように?

ありがとうございます。

+0

私は、JSONファイルを解析すると、任意の速いオリジナルのテキストファイルを解析するよりもために起こっているか見ることができません。 JSONはファイルのサイズを大きくします。おそらく、それはあなたがテキストファイルを解析しようとしている方法です。あなたのコードを表示します。 – Paulw11

+0

@ Paulw11はコードスニペットを追加して、特別な場合について言及するのを忘れてしまいます。それを加えました。 – onurgenes

+0

'locationData.writeToRealmDB()'をコメントアウトするとどれくらいかかりますか?あなたはあなたの時間がどこに費やされているかを見るために時間プロファイラ計器を使いましたか?また、ファイルが読み込まれるときに解析する答えについては、[この質問](https://stackoverflow.com/questions/25846459/simple-way-to-read-local-file-using-swift)をご覧ください。 – Paulw11

答えて

0
import pandas as pd 

with open('filename.txt', 'r') as f: 
lines = f.readlines() 
for line in lines: 
    if line.count(';') == 4: 
     index = line.index(';', 2) 
     line = line[:index] + ';' + line[index:] 
    with open('filename2.txt', 'a') as f2: 
     f2.write(line) 

df = pd.read_csv('filename2.txt', header=None, sep=';') 
df = df.iloc[:, :-1] 
df.columns = ['col1', 'col2', 'col3', 'Latitude', 'Longitude'] 
df.to_json('filename.json') 

http://pandas.pydata.org/pandas-docs/stable/io.html

+0

私は特別な場合についての言及を忘れてしまった。あなたはあなたの答えを更新していただけますか? – onurgenes

関連する問題