C # и файл CSV - PullRequest
       21

C # и файл CSV

1 голос
/ 02 сентября 2011

Я отформатировал эти данные с помощью c #, потокового чтения и записи и создал этот CSV-файл.Вот пример данных:

A------B-C---D----------E------------F------G------H-------I

NEW,  C,A123 ,08/24/2011,08/24/2011 ,100.00,100.00,X123456,276135

NEW,  C,A125 ,08/24/2011,08/24/2011 ,200.00,100.00,X123456,276135

NEW,  C,A127 ,08/24/2011,08/24/2011 , 50.00,100.00,X123456,276135

NEW,  T,A122 ,08/24/2011,08/24/2011 ,  5.00,100.00,X225511,276136

NEW,  T,A124 ,08/24/2011,08/24/2011 , 10.00,100.00,X225511,276136

NEW,  T,A133 ,08/24/2011,08/24/2011 ,500.00,100.00,X444556,276137

I would like the following output:

NEW,  C,A123 ,08/24/2011,08/24/2011 ,100.00,100.00,X123456,276135

NEW,  C,A125 ,08/24/2011,08/24/2011 ,200.00,100.00,X123456,276135

NEW,  C,A127 ,08/24/2011,08/24/2011 , 50.00,100.00,X123456,276135

NEW,  C,A001 ,08/24/2011,08/24/2011 ,350.00,100.00,X123456,276135

NEW,  T,A122 ,08/24/2011,08/24/2011 ,  5.00,100.00,X225511,276136

NEW,  T,A124 ,08/24/2011,08/24/2011 , 10.00,100.00,X225511,276136

NEW,  T,A001 ,08/24/2011,08/24/2011 , 15.00,100.00,X225511,276136

NEW,  T,A133 ,08/24/2011,08/24/2011 ,500.00,100.00,X444556,276137

NEW,  T,A001 ,08/24/2011,08/24/2011 ,500.00,100.00,X225511,276137

При каждом изменении в поле «I» я хотел бы добавить строку, столбец суммы F, добавить «A001» в C и скопировать содержимоедругие поля в этой новой добавленной строке.

Буквы в столбцах приведены только для иллюстрации.Заголовков нет.

Во-первых, что мне делать в первую очередь?Как суммировать столбец F, скопировать содержимое всех полей и добавить «A001» в C?Как добавить строку и скопировать поля с каждым изменением в I?

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Вы можете использовать пользовательский блок итератора, просто в качестве примера здесь показано, как добавить новую строку, содержащую ваш столбец «A001» C.Вы также можете легко добавить новый столбец суммы - имейте в виду, что количество столбцов в каждой строке должно быть одинаковым.

public IEnumerable<string> GetUpdatedLines(string fileName)
{
    int? lastValue = null;
    foreach (string line in File.ReadLines(fileName))
    {
        var values = line.Split(',');
        int myIValue = Convert.ToInt32(values[7]);
        if (lastValue.HasValue && myIValue != lastValue)
        {
            //emit new line sum
            values[2] = "A001";
            yield return string.Join(",", values);
        }
        lastValue = myIValue;
        yield return line;
    }
}
0 голосов
/ 02 сентября 2011

Из ваших вопросов не похоже, что ваши данные очень хорошо соответствуют формату плоских файлов или, по крайней мере, не CSV (аналог одной таблицы БД). Желание «скопировать содержимое других полей в эту новую ДОБАВЛЕННУЮ строку» означает для меня, что, возможно, существует отношение, которое может быть лучше выражено референциально, чем копирование данных в новую строку.

Также имейте в виду, что требование к суммированию в соответствии со столбцом «F» предполагает, что вам нужно будет выполнять итерацию по каждой строке, чтобы вычислить сумму.

Если вы решите пойти по пути, отличному от CSV, вы можете попробовать облегченное решение для базы данных, такое как SQLite . В качестве альтернативы можно посмотреть XmlSerializer или DataContract (с Serializer) и просто работать с объектами в вашем коде. Объекты могут быть сериализованы на диск, когда вы закончите с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...