[C] Operacje na plikach

0

Mam za zadanie napisać program, który będzie składał się z funkcji wczytującej dane z pliku csv i z funkcji wpisującej dane do pliku csv.

Funkcja która ma zapisywać dane do pliku csv działa. Ale wpisuje dane w jedną kolumne. A ma wpisywać dane w dwie kolumny. Nie wiem jak to zrobić.

Natomiast funkcja która pobiera dane z pliku i zapisuje je do tablicy coś nie działa.

Proszę o wyrozumiałość. Dopiero zaczynam ;)

#include <iostream>
#include <cstring>

using namespace std;

void WyswietlMenu()
{
	cout << "MENU" << endl;
	cout << "1-Zapisz do tablicy" << endl;
	cout << "2-Zapisz do pliku" << endl;
	cout << "x-Wyjscie" << endl;
}


void ReadFile(char *FileName)
{
	int liczba1; 
	float liczba2; 
	int idx = 0;
	int tab1[100];
	float tab2[100];
	FILE *plik=fopen(FileName, "r+t");

	while(fscanf(plik,"%d,%f", &liczba1, &liczba2)>0)
	{
		tab1[idx]=liczba1;
		tab2[idx]=liczba2;
		idx++;
	}
	fclose(plik);
	for(int i =0; i<100; i++)
	{
		printf("%d ", tab1[i]);
		printf("%f", tab2[i]);
	}
}

void Export2File(char *FileName)
{
	float tab1[5];
	float tab2[5];

	float liczba;

	printf("Podaj 5 liczb: ");
	for (int i=0; i<5; i++)
	{
		scanf("%f", &liczba);
		tab1[i]=liczba;
		tab2[i]=liczba*liczba;
	}

	for(int i=0; i<5; i++)
		printf("%.2f ", tab1[i]);
	printf("\n");

	for(int i=0; i<5; i++)
		printf("%.2f ", tab2[i]);
	printf("\n");

	FILE *plik=fopen(FileName, "w+t");

	for(int i=0; i<5; i++)
		fprintf(plik, "%f\n, %f\n", tab1[i], tab2[i]);

	fclose(plik);
}

int main()
{
      char opcja='a';
      char *plik = "xxx.csv";
	  
      while(1)
      {
          WyswietlMenu();
          cin>>opcja;
          switch(opcja)
          {
                   case '1': ReadFile(plik); break;
	           case '2': Export2File(plik); break;
                   case 'x': 
		   case 'X': return 0;  
          }       
      }      
      
}
0

Ale format pliku CSV to:

WartoscA1,WartoscB1
WartoscA2,WartoscB2
WartoscA3,WartoscB3
(...)

Czyli:

  1. Kolejne kolumny oddzielane są przecinkiem.
  2. Entera używamy dopiero, gdy zaczynamy nowy wiersz.
  3. Nie wiem, czy nie trzeba jeszcze byłoby sprawdzić opcji regionalnych - na przykład w polskim Excelu zamiast przecinków trzeba użyć średników.
0

czyli tak?

for(int i=0; i<5; i++)
   fprintf(plik, "%f, %f\n", tab1[i], tab2[i]);

ale tak też się poprawnie nie wyświetla. W pliku csv mam po prostu wartosc1, wartosc2 w kolumnie A.

1 użytkowników online, w tym zalogowanych: 0, gości: 1