преобразовать строку в двойную дает ноль - PullRequest
0 голосов
/ 30 октября 2018

Я анализирую текстовый файл, чтобы узнать широту и долготу местоположений. Мне нужно преобразовать строки lon / lat в double, но я не могу этого сделать.

Я пробовал оба метода 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, не является обязательным. Обрезка пробелов тоже не помогла. lat всегда ноль.

Что здесь происходит?

1 Ответ

0 голосов
/ 30 октября 2018

Видимо, числа с плавающей запятой заключены в кавычки, так что вам нужно будет не только обрезать пробелы, но и кавычки. Пример:

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 на строки и поля.
  • Ваш вход - файл в формате CSV? Есть библиотеки читателей с открытым исходным кодом CSV что вы можете попробовать.
...