簡體   English   中英

將制表符分隔的值從文本文件讀取到數組中

[英]Reading tab-separated values from text file into array

嘿,我是C ++的新手,現在遇到了一個問題:

我有一個看起來像這樣的文本文件:

500

1120

10

number1,1 number1,2   ...   number1,500

number2,1

.

.

number1120,1

因此,文本文件頂部的前兩個值描述了矩陣的尺寸。 我現在想編寫一個代碼,該代碼將矩陣中的所有文件讀入int值的數組或向量中。 我可以讀取前三個值(500、1120、10),並使用getlinestringstream將它們寫入整數值,但是我不知道如何讀取用循環分隔的矩陣抽頭。

像這樣:

#include <iostream>
#include <sstream>

// Assume input is 12,34,56. You can use 
// getline or something to read a line from
// input file. 
std::string input = "12,34,56";

// Now convert the input line which is string
//  to string stream. String stream is stream of 
// string just like cin and cout. 
std::istringstream ss(input);
std::string token;

// Now read from stream with "," as 
// delimiter and store text in token named variable.
while(std::getline(ss, token, ',')) {
    std::cout << token << '\n';
}

您可以考慮通過循環逐行讀取矩陣,並使用標記器(例如std::strtok )或嵌套循環(在定界符處進行分割)來拆分當前行。 關於標記化器有一個主題。

感謝您的回答,我現在可以讀取所有數據,細分為數組,但是不幸的是,我遇到了一個非常奇怪的問題。 這是我的代碼:

// Matrix deklarieren 
    long int** mat_dat = new long int *[m_height];
    for (long int a = 0; a < m_height; ++a)
        mat_dat[a] = new long int[m_width];

    //ganzes Feld als String einlesen


    //Daten aus Textdatei lesen
    long int i = 0;
    long int j = 0;
    long int value = 0;
    while (myfile.good())
    {
        getline(myfile, test);
        istringstream ss(test);
        string token;
        while (std::getline(ss, token, '\t'))
        {
            cout << token << '\t';
            value = atoi(token.c_str());
            mat_dat[j][i] = value;
            i++;
        }
        if (j == m_depth)
        {
            break;
        }
        j++;
        i = 0;

它將所有數據完美地保護到陣列中,這就是我的想法。 但是當我仔細觀察時,只有數組的前512個值是正確的(mat_dat [0] [512]是正確的)和(mat_dat [1] [512]是正確的。mat_dat [0] [ 512]到mat_dat [0] [1120]是不正確的,您有什么線索為什么在那個地方開始變得不正確?

暫無
暫無

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

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