Как прочитать определенный столбец символов из набора данных

Я работаю с набором данных атрибутов в текстовом файле, который выглядел примерно так:

e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g
e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p
e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g
e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m
e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g
e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g
e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u
e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g

Теперь я пытаюсь понять, как я могу легко читать символы из данного столбца. Например, если бы я хотел прочитать из 3-го столбца, вывод был бы «yyssysfs». Я не могу понять, как это сделать, хотя. Кто-нибудь знает, что я мог бы сделать?

2

Решение

Читайте каждую строку, по одному, возможно, удаляя запятые, и вставьте std::vector, Чтобы получить третий столбец, просто переберите все строки в векторе, получив третий (если запятые удалены) символ из строки.

1

Другие решения

Это решение с использованием темных внутренних органов iostreams:

struct dataset_ctype : std::ctype<char>
{
mask table[table_size];
public:
dataset_ctype(size_t refs = 0) : std::ctype<char>(table, false, refs) {
std::fill(table, table+table_size, (mask)alpha);
table[','] = (mask)space;
}
};

int main()
{
std::string inp =
"e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g\n""e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p\n""e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g\n""e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m\n""e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g\n""e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g\n""e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u\n""e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g\n";

std::istringstream is(inp);
is.imbue(std::locale(is.getloc(), new dataset_ctype));

const int column = 2;
while (is) {
std::istream_iterator<std::string> ii(is);
std::advance(ii, column);
std::cout << *ii << '\n';
is.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
1

Каково именно ваше определение колонки. Обычным
определение, список символов в третьем столбце будет
"xfbbxbxb" (и список символов во втором столбце
было бы ",,,,,,,,"). То, что вы, кажется, хотите, это список
персонажи в третьем поле.

Для списка символов в столбце решение тривиально.
Просто прочитайте построчно (std::getline), и индекс в строке
с номером столбца (после проверки, что строка действительно
достаточно долго, конечно).

Для списка символов в поле, вам придется разбить каждый
линия в поля, возможно, положить результаты в
std::vector<std::string>, а затем индексировать в этот вектор.

Если это плохо сформулированная проблема с домашним заданием, и вы
гарантируется, что 1) каждое поле имеет ровно один символ и 2)
поля разделяются одной запятой, без дополнительных белых
пространство, то вы можете сопоставить поля столбцам (2 * fieldId - 1
дает колонку). Сделав это, вы можете использовать решение
для символов в столбце.

1

использование std::ifstream чтобы открыть файл, а затем иметь while цикл, состояние которого std::getline(file,line), где line является std::string, Вы можете определить, какая позиция символа в строке от номера столбца, iкак просто существо 2 * i (если первый столбец i == 0). Чтобы получить этот символ из строки, просто используйте std::string::operator[], Не нужно разбирать строку вообще. Затем вставьте символ, полученный из каждой строки, в std::vector<char>,

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector