前提・実現したいこと
私は現在、csv化したファイルを二次元配列に読み込み、指定した値と一致するデータの行数、列数(Excelで開いた時のような)を取得するプログラムを組みたいと考えています。そこでこちらの質問(https://teratail.com/questions/94162)を参考に、「csvファイルを読み込み、二次元配列に格納、それを配列から.csvに出力して格納を確認する」として以下のプログラムを書いたのですが、現在2つの問題が発生しています。
①下のファイルのeCsvの部分でエクスポートされたcsvファイルのデータの大部分が0に置き換えられてしまう(添付画像参照)
②①が解決し二次元配列への格納ができたとして、一致したデータの行数、列数をどう取得すればいいのかわからない
最終的にはこれを400×400のcsvファイルで利用したいと考えています。
まだまだ初学者ですので、お知恵を貸していただけると助かります。
###開発環境
Sublime Text 3
MinGW g++
該当のソースコード
C++
1#include <iostream> 2#include <fstream> 3#include <sstream> 4#include <string> 5 6#define MAP_HEIGHT 10 7#define MAP_WIDTH 10 8 9using namespace std; 10 11int m_Map[10][10]; // csvデータ格納 12 13int stoi(string str){ // stoi関数の定義 14 int ret; 15 stringstream ss; 16 ss << str; 17 ss >> ret; 18 return ret; 19} 20 21void iCsv(){ // csvファイルのインポート 22 23 ifstream ifs("Original/Test.csv"); 24 string line; 25 int i; 26 27 i = 0; 28 29 while(getline(ifs, line)){ 30 31 string token = ","; 32 istringstream stream(line); 33 34 while(getline(stream, token)){ 35 m_Map[i/MAP_HEIGHT][i%MAP_WIDTH] = stoi(token.c_str()); 36 i++; 37 } 38 39 } 40 41} 42 43void eCsv(){ //正しく入力されたかどうか確認 44 ofstream ofs("Converted/Test.csv");//ファイルの出力ストリーム 45 for (int i = 0; i < MAP_HEIGHT; i++){ 46 47 for (int j = 0; j < MAP_WIDTH; j++){ 48 int num = i*j; 49 ofs<<(int)m_Map[num / MAP_HEIGHT][num% MAP_WIDTH]<<"," ; 50 } 51 52 ofs << endl; 53 54 } 55 56 ofs.close(); 57 58} 59 60int main(){ 61 iCsv(); 62 eCsv(); 63 64 return 0; 65}
回答2件
あなたの回答
tips
プレビュー