Этот вопрос несколько лет, но я наткнулся на него, а это значит, что другие будут.
Библиотека / пакет readr
имеет некоторые полезные функции. Один из них - хороший способ интерпретировать «грязные» столбцы, такие как.
library(readr)
read_csv("numbers\n800\n\"1,800\"\n\"3500\"\n6.5",
col_types = list(col_numeric())
)
Это дает
Источник: локальный фрейм данных [4 x 1]
numbers
(dbl)
1 800.0
2 1800.0
3 3500.0
4 6.5
Важным моментом при чтении файлов является либо предварительная обработка, как комментарий выше относительно sed
, либо вы должны обрабатывать во время чтения. Часто, если вы пытаетесь исправить ситуацию после факта, есть некоторые опасные предположения, которые трудно найти. (Вот почему плоские файлы так злы в первую очередь.)
Например, если бы я не помечен col_types
, я бы получил следующее:
> read_csv("numbers\n800\n\"1,800\"\n\"3500\"\n6.5")
Source: local data frame [4 x 1]
numbers
(chr)
1 800
2 1,800
3 3500
4 6.5
(Обратите внимание, что теперь это chr
(character
) вместо numeric
.)
Или, что более опасно, если бы оно было достаточно длинным, и большинство ранних элементов не содержало запятые:
> set.seed(1)
> tmp <- as.character(sample(c(1:10), 100, replace=TRUE))
> tmp <- c(tmp, "1,003")
> tmp <- paste(tmp, collapse="\"\n\"")
(так, что последние несколько элементов выглядят так:)
\"5\"\n\"9\"\n\"7\"\n\"1,003"
Тогда вы найдете проблемы с чтением этой запятой вообще!
> tail(read_csv(tmp))
Source: local data frame [6 x 1]
3"
(dbl)
1 8.000
2 5.000
3 5.000
4 9.000
5 7.000
6 1.003
Warning message:
1 problems parsing literal data. See problems(...) for more details.
DateTime.AddDays
возвращает новый экземпляр без изменения date
. На данный момент вы выбрасываете этот новый экземпляр. Вместо этого вам нужно сделать:
for (DateTime date = DateTime.Now; futureDate.CompareTo(date) > 0; date = date.AddDays(1.0))
{
// logic here
}
Кроме того, я не уверен, почему вы звоните CompareTo
, когда вы можете использовать оператор <
. Я не могу сказать, является ли CompareTo(date) > 0
правильным, не задумываясь об этом, в то время как намерение оператора <
очевидно:
for (DateTime date = DateTime.Now; date < futureDate; date = date.AddDays(1.0))
{
// logic here
}
DateTime является неизменным. Изменить на: date = date.AddDays (1.0)