从文件填充 2D 数组

Fill 2D array from file

本文关键字:数组 2D 填充 文件      更新时间:2023-10-16

您好,我在从文件填充 2D 数组时遇到问题。

我在文件数组中有带有字符串的数组每行的字符串有 78 个字符和文件有 19 行。(最后一行的字符串只有 60 个字符(

此文件

00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFXX
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1XX1FFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

我尝试用文件中的变量填充 2D 数组。我需要 5 行和 300 列的填充数组

但我不知道怎么做。

这是关于图像中像素的信息。 我想用信息填充数组C++。数组必须具有相似的 x*y 图像。(5×300(

我尝试了几个小时,但没有成功。

我的代码在这里。

T **imageHEX; //char
    int VYSKA = 5 , SIRKA = 300 , VLINE = 78;
    int lines = 0; // precitane riadky
                   // alokacia miesta pre na obrazok vyska x sirka
    imageHEX = new T*[VYSKA];
    for (int i = 0; i < VYSKA; i++)
        imageHEX[i] = new T[SIRKA];

    ifstream file("heximg.txt"); // pass file name as argment
    string line;
    int pom = 0;
    int line_in_file = 0;
    int pocetvline = 0;
    int doline= 0;
    int zaciatok;
        // do something
    for (int lines = 0; lines < VYSKA; lines++) {
        pom++;
                if (doline != 0) {
                    cout << "doline  " << doline << endl;
                    for (int zostatok = doline; zostatok < 78; zostatok++) {
                        imageHEX[lines][zostatok-doline-1] = line[zostatok % 78];
                        pocetvline++;
                    }
                    zaciatok = 78 - doline-1;
                }
                else {
                    zaciatok = 0;
                }
                for (int lnmax = 0; lnmax < SIRKA; lnmax++)
                {       
                            if ((lnmax % 78 == 0)) {
                                getline(file, line);
                                line_in_file++;
                                cout << line_in_file << "  " << line << endl;
                            }
                            if (lnmax + zaciatok < SIRKA) {
                                imageHEX[lines][lnmax + zaciatok] = line[lnmax % 78];
                            } else {
                                for (int zvysok = 0; zvysok < zaciatok; zvysok++) {
                                    imageHEX[lines+1][zvysok] = line[lnmax % 78];
                                }
                            }
                            pocetvline++;
                            doline = lnmax % 78;


                }
                for (int tst = 0; tst < SIRKA; tst++) {
                    cout << imageHEX[lines][tst];
                }
                cout <<"druhyriadok " << lines << endl;
                cout << "pocet v riadku " << pocetvline << endl;
                pocetvline = 0;
        //  lines++;
        }
    //}     
    file.close();
 I fill array with variables from file, but wrong, If I read char somwhere from middle string and in array have sourroudings [x][299] automatically read next line and rest in line is in next line (on start in next line) But I have troubble with continue indexing when I read line from next row in file.

你有什么想法吗?谢谢

或者你有如何从文件中读取字符串,比如一个没有行的大字符串?

使用 istream::get 逐个字符读取文件并忽略换行符可能更容易,例如

#include <fstream>
#include <cctype>
#include <iostream>
bool isHex(char val) {
  return ('0' <= val && val <= '9') || ('A' <= val && val <= 'F');
}
void readFile(std::ifstream& file, char** imageHex, int rows, int columns) {
  char currentByte;
  for (int row =0; row < rows; row++ ) {
    for(int column=0; column < columns; column++ ) {
      if (!file.get(currentByte)) {
          // end of file, or other error
          return;
      }
      if (isHex(currentByte)) {
        imageHex[row][column]=currentByte;
      }
      else if (!std::isspace(currentByte)) {
         std::cout << "Unexpected character '" << currentByte 
         << "' at (" << row << ", " <<column << ") " << std::endl;
      }
    }
  }
}