簡體   English   中英

讀取.csv文件並將值存儲到vector和struct c ++中

[英]Reading in a .csv file and storing values into vector and struct c++

我是C ++編程的新手,正在嘗試解決一個實踐問題,但是由於向量只能容納一種數據類型(除非它可以容納更多的數據類型),所以我並不真正理解它試圖讓我做什么:

讀取.csv文件,其中每行的結構如下:“用戶名,gpa,年齡”。 將這些值存儲到具有用戶名,gpa和年齡(字符串,浮點數,整數)的結構中,並創建一個向量列表。 在每一行中閱讀時,請插入按用戶名排序的向量列表。 然后循環遍歷並打印出格式如下的列表:“用戶名[gpa] age:#”,例如“ mark [3.9] age:19”,還將輸出寫入文件(使用C ++,而不是Unix)。

我是否應該將所有這些值作為單獨的數據類型放入相同的向量中,或者將它們全部放在一個字符串中然后插入它們? 如何將這些值存儲到結構中? 如果有人可以告訴我他們將如何解決問題並給我一些很好的示例代碼,謝謝。

好吧,從聲音的角度來看,問題是希望您讀取文件,將信息放入結構中,然后根據名稱按字母順序將結構插入向量中。

我將使結構類似於:

struct StudentInfo {
    string name;
    string gpa;
    string age;
} StudentInfo;

然后,我將打開文件並將整個內容讀入字符串。 然后,我通讀了字符串,並用換行符將其標記。 當我得到每個字符串時,我會將其放入一個函數中,該函數對其進行解析並返回一個struct studentInfo。 然后將結構插入向量。

解析功能如何工作的一個示例:

struct StudentInfo parseData(string iStr) {
    struct StudentInfo info;
    size_t subStrStart = 0;
    size_t subStrEnd = 0;
    subStrEnd = iStr.find(',', subStrEnd);
    info.name = iStr.substr(subStrStart, subStrStart - subStrEnd);

    subStrStart = subStrEnd;
    subStrEnd = iStr.find(',', subStrEnd+1);
    info.gpa = iStr.substr(subStrStart, subStrStart - subStrEnd);

    subStrStart = subStrEnd;
    subStrEnd = iStr.find(',', subStrEnd+1);
    info.age = iStr.substr(subStrStart, subStrStart - subStrEnd);

    return info;
}

我為主要功能編寫的一些偽代碼:

vector<struct StudentInfo> infoVec;
string fileStr = read(filename.csv); // make an ifstream or something similar
string lineStr;
size_t subStrEnd = 0;
size_t subStrStart = 0;
while (subStrEnd < fileStr.Size) {
    subStrEnd = iStr.find('\n', subStrEnd); //alternatively use std::getline() directly on the file stream
    lineStr = iStr.substr(subStrStart, subStrStart - subStrEnd);
    subStrStart = subStrEnd;
    subStrEnd++;
    infoVec.insert(parseData(lineString));
}
sortByName(infoVec) // User defined function
printInfoVec(infoVec) // User defined function

打印功能和排序功能很容易說明,但是它們需要您編寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM