Как читать CSV с двойными строками внутри - PullRequest
0 голосов
/ 05 апреля 2019

Добрый вечер,

Я хочу прочитать CSV-файл, который разделен, но также включить некоторые строки. Это было бы легко решить, но мой csv действительно странный, потому что в строке есть двойные "и даже тройные" "", которые имеют, внутри строки. Не знаю, кто это делает, но я должен с этим справиться.

Вот пример того, как выглядит мой CSV:

StationID,Longitude,Latitude,Height,Remark
0000002,26.074412,44.446770,0,Bucuresti
0000003,1.811446,50.901549,0,Calais
0000004,1.075329,51.284212,0,Canterbury
0000005,-3.543547,50.729172,0,Exeter
"0000007,9.733756,46.922368,744,""Fideris, Bahnhof"""
0000008,8.571251,50.051219,0,Frankfurt Flughafen
0000009,18.643803,54.355520,0,Gdansk
0000011,7.389462,47.191804,467,Grenchen

Как видите, StationID 0000007 усложняет задачу.

Единственное, что я смог сделать, это так:

StationID Longitude Latitude Height              Remark
1                                           0000002 26.074412 44.44677      0           Bucuresti
2                                           0000003  1.811446 50.90155      0              Calais
3                                           0000004  1.075329 51.28421      0          Canterbury
4                                           0000005 -3.543547 50.72917      0              Exeter
5 0000007,9.733756,46.922368,744,"Fideris, Bahnhof"        NA       NA     NA                    
6                                           0000008  8.571251 50.05122      0 Frankfurt Flughafen
7                                           0000009 18.643803 54.35552      0              Gdansk
8                                           0000011  7.389462 47.19180    467            Grenchen

Я надеюсь, что кто-нибудь может мне помочь

1 Ответ

0 голосов
/ 05 апреля 2019

На примере данных кажется достаточным удалить все двойные кавычки, которые появляются как в начале, так и в конце строк, и заменить строки последовательных двойных кавычек одной двойной кавычкой.

L <- readLines("myfile.txt")
read.csv(text = gsub('"+', '"', sub('^"(.*)"$', '\\1', L)), 
   colClasses = c(StationID = "character", Remark = "character"))

дает:

  StationID Longitude Latitude Height              Remark
1   0000002 26.074412 44.44677      0           Bucuresti
2   0000003  1.811446 50.90155      0              Calais
3   0000004  1.075329 51.28421      0          Canterbury
4   0000005 -3.543547 50.72917      0              Exeter
5   0000007  9.733756 46.92237    744    Fideris, Bahnhof
6   0000008  8.571251 50.05122      0 Frankfurt Flughafen
7   0000009 18.643803 54.35552      0              Gdansk
8   0000011  7.389462 47.19180    467            Grenchen
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...