Как я могу записать данные с плавающей точкой из файла .txt в 2-мерный массив с VS2017? - PullRequest
0 голосов
/ 27 января 2019

Как я могу прочитать данные с плавающей запятой из файла .txt :

8.9 789.3 845.6
2.45 2.25 2.05

.,.и записать каждый float в элемент массива.Я посмотрел в Интернете, и я не могу найти четкий ответ или учебник о том, как это сделать.Я использую VS2017 Enterprise , и у меня уже есть файл .txt в файле ресурсов моего проекта.

Ответы [ 4 ]

0 голосов
/ 27 января 2019

перемещает данные из файла .txt в 2-мерный массив

не может найти четкий ответ или руководство о том, как это сделать.

Псевдонабросок кода

Сделать эти функции

// return 1: success
// return 0: failure
// return -1: EOF or end of line
int read_one_float(FILE *stream, float *f) 
  fgetc(): read leading white space, if \n encountered, return -1
  ungetc(): put non white space character back in stream
  if f == NULL, form a dummy location to save data
  scanf("%f", f) and return its value

// return > 0: return count of float
// return 0: failure
// return -1: EOF
int read_one_line(FILE *stream, float *f) 
  count = 0
  repeatedly 
    call read_one_float(f)
    if (response != 1) return count
    if (f not NULL) f++
    count++;
  return count

// return > 0: return count of lines
// return 0: failure
// return -1: EOF
int read_FILE(FILE *stream, float **f, int *width)  
  line = 0;
  *width = 0
  repeatedly 
    call read_one_line(f)
    if (response <= 0) return line
    *width = max (*width, response)
    if (f not NULL) f++
    line++;
  return line 

Составить

int main()  
  open file
  width = 0
  line count = read_FILE(file, NULL, &width);
  allocate f float[count][width]
  REWIND file
  read_FILE(file, f, &width);
  close file

  do something with f

  deallocate
0 голосов
/ 27 января 2019

Я всегда извлекал выгоду из объяснения , как человек получил ответ на вопрос только по коду, поэтому вот как я мог бы обдумать эту проблему (при условии небольшого знания выбранного языка):

Сначала мне нужно прочитать файл. Сейчас я выхожу в интернет и ищу, как читать файл. Я нахожу несколько примеров чтения файлов и выбираю, что для меня наиболее целесообразно (будь то потоковая передача файла или чтение всего файла в char *). Как только я понял это, я могу перейти к вычислению 2d массива.

Чтобы построить массив 2d, мне сначала нужно инициализировать массив 2d до правильного размера. Если вы действительно начинающий, это может означать поиск инициализации двумерного массива. Затем я могу перейти к заполнению массива.

Теперь я перебираю 2d массив. Если вы действительно начинающий, это может означать поиск итераций в массиве 2d. Для каждой ячейки в массиве 2d мне нужно проанализировать следующий float из файла и вставить его в клетка.

Эта часть, в зависимости от того, как вы решили прочитать файл, может быть выполнена разными способами. Предполагая, что вы передаете файл в потоковом режиме, вам необходимо прочитать следующее «слово», а затем преобразовать этот текст в число с плавающей точкой. Чтобы сделать это, я, вероятно, буду искать такие вещи, как «читать текст до пробела или перевод строки в C» и «конвертировать строку в плавающий в C».

Тогда все, что осталось сделать, это проверить!
Надеюсь, это поможет.

0 голосов
/ 27 января 2019

Используйте system.IO для чтения текста в файле, а затем используйте C # split для преобразования в массив.

* Namespaces 1003 *

using System;
using System.IO;
using System.Text;

В вашем коде

string path = @"c:\temp\MyTest.txt";
// Open the file to read from.
string readText = File.ReadAllText(path);
string[] strarray = readText.Split(Convert.ToChar(' '));

Если вы хотите преобразовать его в массив double. Используйте linq

double[] darray = readText.Split(Convert.ToChar(' ')).Select(n => Convert.ToDouble(n)).ToArray();
0 голосов
/ 27 января 2019

вот простой пример, который вы можете использовать

#include<stdio.h>
#include<stdlib.h>

int main(){
FILE *f=fopen("file.txt","r");
float a;
char b[255];
while(!feof(f)){
        fscanf(f,"%s",b);
        a=atof(b);
printf("%f\n",a);

} fclose(f);
}
...