Я разбираю текстовый файл, чтобы получить широту и долготу местоположений. Мне нужно преобразовать строки lon / lat в двойные, но я не могу этого сделать.
Я пробовал как метод Double (String), так и (String as NSNumber) .doubleValue. Всегда дает ноль.
Когда я ввожу числа вручную, это работает.
Вот фрагмент кода:
var items = [[String]]()
func readParkingData() {
guard let filepath = Bundle.main.path(forResource: "parking", ofType: "txt") else {
print("file not found")
return
}
print("file path : \(filepath)")
do{
let content = try String(contentsOfFile: filepath, encoding: .utf8)
let attributed = content.htmlAttributedString
let decoded : String = attributed!.string
let split = decoded.split(separator: ";")
var count = 0
var item = [String]()
for word in split {
item.append(String(word))
count += 1
if count == 30 {
items.append(item)
item = [String]()
count = 0
}
}
for entry in items {
print(entry[24])
print(entry[25])
let latString : String = entry[24]
let lonString : String = entry[25]
print(type(of: latString))
let lat = Double(latString)
print(lat)
}
}catch{
print("file read error \(filepath)")
}
}
Я просмотрел другие ответы. Тип latString - String, необязательный. Обрезка пробелов тоже не помогла. лат всегда равен нулю.
Что тут происходит?
latString.debugDescription показывает "\" 40.426687899755734 \ ""
Вот вам ответ: число заключено в кавычки. - Кстати, почему вы работаете со строкой с атрибутами, а не с исходным контентом? Какой формат входного файла?
Ну конечно. Спасибо за это! Это правильный ответ.





Судя по всему, числа с плавающей запятой заключены в кавычки, поэтому вам нужно не только обрезать пробелы, но и кавычки. Пример:
let latString = "\"12.34\""
print(latString) // "12.34"
var cs = CharacterSet.whitespaces
cs.insert("\"")
let trimmedLatString = latString.trimmingCharacters(in: cs)
print(trimmedLatString) // 12.34
print(Double(trimmedLatString)!) // 12.34
Дальнейшие примечания:
htmlAttributedString, вы
вероятно, следует разбить исходный content на строки и поля.
Показать вывод
print(latString.debugDescription)