Конкретный вопрос, который у меня возникает, заключается в том, как создать макрос, который принимает в качестве аргумента функцию с более чем одним параметром, где первый параметр определенного типа предоставляет этот аргумент для первого функция.
blockquote>Макросы (даже процедурные макросы) работают с синтаксическими деревьями, поэтому они не могут изменять свое поведение в зависимости от семантики, включая типы и функции функций. Это означает, что для каждого возможного числа аргументов вам потребуется отдельный макрос. Например:
macro_rules! curry1 { ($func: ident, $($arg: expr),*) => { |a| $func($($arg),*, a) } } macro_rules! curry2 { ($func: ident, $($arg: expr),*) => { |a, b| $func($($arg),*, a, b) } } macro_rules! curry3 { ($func: ident, $($arg: expr),*) => { |a, b, c| $func($($arg),*, a, b, c) } }
Что будет использоваться следующим образом:
fn f(a: i32, b: i32, c: i32) -> i32 { a + b + c } fn main() { // requires 2 extra args let f_2 = curry2!(f, 2); // requires 1 extra arg let f_2_1 = curry1!(f, 2, 1); println!("{}", f(2, 1, 3)); // 6 println!("{}", f_2(1, 3)); // 6 println!("{}", f_2_1(3)); // 6 }
Попытайтесь использовать CharacterSet=UNICODE
в Вашем файле schema.ini. Хотя это не документируется на MSDN, он работает согласно этому потоку над Microsoft Forums.
Ну, очень хорошая и хорошо используемая потоковая передача читатель CSV находится на CodeProject; это - первая вещь, которую я попробовал бы..., но она кажется, что Ваше кодирование может быть borked, который не мог бы сделать ее простой..., конечно, это мог просто быть odbc, который повреждается, в этом случае вышеупомянутое могло бы хорошо работать.
Для простого CSV Вы могли попытаться анализировать его сами (string.Split
и т.д.), но существует достаточно пограничных случаев, которые предварительно прокрученный синтаксический анализатор стоит использовать.