2017-04-14 13 views
0

Excelからの文字列を2次元文字列に格納できません。Excelからの入力文字列を2次元文字列に格納できません

#include <iostream> 
#include <string.h> 
#include <fstream> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    ifstream file("input.csv"); 
    string line,cell; 
    string name[5][20]; 
    string period[5][8]; 
    string tname; 
    int pos, i = 0; 

    while(getline(file, line)) { 
     stringstream linestream(line); 
     int j = 0; 
     while(getline(linestream, cell, ',')) { 
      if(j == 0) 
       name[i][j] = cell; 
      else 
       period[i][j - 1] = cell; 
      j++; 
     } 
     i++; 
    } 
+0

私のああ...そのインデントを修正してください。 TIA。 – Borgleader

+0

[Duplicate](http://stackoverflow.com/questions/1120140/how-can-i-read-and-parse-csv-files-in-c)? – Ayak973

+3

名前[i] [0]のみを使用している場合、名前が2D配列になるのはなぜですか? – fzd

答えて

0

あなたは私はあなたがそれを行うことができなかったと思いますifstreamを持つ文字列をカンマで別のファイルを保存したい場合。
なぜですか?

たちは、このファイルがあるとしましょう:

one,two,three 
four,five,six 
seven , eight, nine 
ten, ten, ten 

あなたはifstream(getlineの)機能を区切り文字として,を使用している場合、それは最初に一緒にone、その後two、その後three\nfourを読み込みます。

最初のオフは、すべてあなたが必要です:

std::ifstream input_file_stream("file"); // file stream 
std::string string[ 4 ][ 3 ];    // row and column 
std::regex regex(R"(\s*,\s*)");   // regex pattern 
int row = 0, column = 0; 

第二段階:

区切り文字は ,なく newline

あなたが快適std::regexを使用して、それは簡単に解決できる場合であるので、

// read from a file line-by-line 
for(std::string one_line; std::getline(input_file_stream, one_line);){ 

    // regex_token_iterator as splitter and delimiter is `,` 
    std::regex_token_iterator<std::string::iterator> first(one_line.begin(), one_line.end(), regex, -1), last; 

     // loop over each line 
     while(first != last){ 

      // each time initialize a row 
      string[ row ][ column++ ] = std::string(*first++); 
     } 

     // for the next row 
     ++row; 
     column = 0; 
} 

、そして最後に

for(const std::string& str : string[ 0 ]) std::cout << str << ' '; 
std::cout << '\n'; 
for(const std::string& str : string[ 1 ]) std::cout << str << ' '; 
std::cout << '\n'; 
for(const std::string& str : string[ 2 ]) std::cout << str << ' '; 
std::cout << '\n'; 
for(const std::string& str : string[ 3 ]) std::cout << str << ' '; 

input_file_stream.close(); 

と出力:

one two three 
four five six 
seven eight nine 
ten ten ten 
関連する問題