Van .txt bestand wegschrijven naar array

Status
Niet open voor verdere reacties.

decca05

Gebruiker
Lid geworden
30 nov 2009
Berichten
8
Ben net nieuw met Taal C. Maar probeer het volgende probleem op te lossen.Hoop zo graag dat iemand me er verder mee kunt helpen!!

Het gaat om het volgende:
Ik heb een bestaand .txt bestand die bestaat uit 6 kolomen bij 12 rijen. Nu wil ik het .txt bestand ophalen. En daarna wegschrijven dmv een subroutine in een array. Dit omdat ik dan hem later (bv [2][3]) in de array aan kan wijzen en verder kan bewerken.

Dit onderstaande heb ik al reeds geprobeerd:

[CPP]
#include <stdio.h>

main()
{
int A[11][5], rij, kolom;

file *fp;
for (rij = 0; rij < 11; rij++)
{
for (kolom = 0; kolom < 5; kolom++)
{
fp=fopen("bartje.txt", "r");
A[rij][kolom]=getc (fp);
printf("%d", A[rij][kolom]);
printf ("\n");
}
}
scanf("%A");
}
[/CPP]

Krijg nu alleen maar het getal 49 onder elkaar gepresenteerd.
 
[cpp]
fp=fopen("bartje.txt", "r");
for(rij = 0; rij < 11; rij++) {
for(kolom = 0; kolom < 5; kolom++) {
A[rij][kolom] = getc(fp);
printf("%c", A[rij][kolom]);
}
printf("\n");
}
fclose(fp);
[/cpp]

Het bovenstaande zou moeten werken.
 
Thanks

Bedankt voor je reactie. Alleen hij presenteerd de kolommen en de rijen nog niet goed op het display. Kwa waarde en plaatsing.Heeft dit te maken met de binnen en buitenlus!!
 
Super bedankt voor je reactie, maar hier zie ik verder geen verbetering in.

Het huidige bestand (bartje.txt) ziet er als volgt uit:

1 123 127 1200 123 146
2 1456 123 231 167 878
3 235 647 789 163 456
4 121 547 898 1100 120
5 275 386 244 212 241
6 1345 167 243 545 243
7 142 767 453 951 285
8 166 143 167 287 298
9 285 376 397 475 334
10 634 1309 254 265 757
11 222 388 557 443 286
12 1334 121 599 454 655

De getallen in het .txt bestand worden gescheiden door een spatie. Wat ik eigenlijk zou willen is dit bestaande bestand in een array te plaatsen.(eigenlijk copy van .txt naar x,y array).

Ik loop nu helaas een beetje vast.:confused:
 
Het huidige bestand (bartje.txt) ziet er als volgt uit:

1 123 127 1200 123 146
2 1456 123 231 167 878
3 235 647 789 163 456
4 121 547 898 1100 120
5 275 386 244 212 241
6 1345 167 243 545 243
7 142 767 453 951 285
8 166 143 167 287 298
9 285 376 397 475 334
10 634 1309 254 265 757
11 222 388 557 443 286
12 1334 121 599 454 655

De getallen in het .txt bestand worden gescheiden door een spatie. Wat ik eigenlijk zou willen is dit bestaande bestand in een array te plaatsen.(eigenlijk copy van .txt naar x,y array).

Ik loop nu helaas een beetje vast.:confused:

Het "probleem" is dat je met getc een karakter uit het bestand leest. Het getal 123 bestaat dus uit de karakters '1', '2' en '3'.

Je zal dus alle karakters moeten inlezen en in een buffer moeten plaatsen totdat je een spatie of een new line karakter tegen komt. Daarna kun je met de functie atoi de buffer omzetten naar een integer.
 
Heb nu het programma'tje verniewd, krijg inderdaad nu wel de waarde gepresenteerd (1 t/m 12) enkel de waarde van positie [0,0] tot er met [0,11] daarna zal de buitenlus hem niet ophogen naar [1,0]. Kan iemand me hierbij helpen

[CPP]
#include <iostream>
#include <fstream>

using namespace std;

ifstream myFile("bartje.txt");
int A[11][5];
char letter[2];

int main()
{
for (kolom = 0; kolom < 5; kolom++)
{
for (rij = 0; rij < 11; rij++)
{
myfile.getline(letter,100)
A[rij][kolom] = (int)atoi(letter);
cout<<A[rij][kolom];
}
system("PAUSE>0");
return 0;
}
}
[/CPP]
 
[cpp]
#include <iostream>
#include <fstream>

int main()
{
std::ifstream in("bestand.txt");
if (in.is_open()) {
int A[12][6], x = 0, y = 0;
std::string temp;
while(in >> temp && x < 12) {
A[x][y] = atoi(temp.c_str());
if (++y > 5) x++, y = 0;
}
in.close();
}
return 0;
}
[/cpp]
 
Bedankt voor de tip, want zal de reden zijn dat ik niks gepresenteerd krijg (heb tussen de programma deeltjes [CPP] system(PAUSE>0");[/CPP] tussen gevoegd.Maar geeft niks weer in het DOS-scherm. Heeft dat misschien te maken dat ik gebruik maak van het programma Dev-C++.

Alvast super bedankt
 
Het is 'system("PAUSE")';

[cpp]
#include <iostream>
#include <fstream>

int main()
{
std::ifstream in("bestand.txt");
if (in.is_open()) {
int A[12][6], x = 0, y = 0;
std::string temp;
while(in >> temp && x < 12) {
A[x][y] = atoi(temp.c_str());
if (++y > 5) x++, y = 0;
}
in.close();
}
system("PAUSE");
return 0;
}[/cpp]

(en de code werkt gewoon zonder problemen onder Dev-C++)
 
Ik weet niet waarom ik deze week zo slecht de tekst/code lees, lol. Er wordt niks naar het scherm geschreven omdat deze code enkel het tekstbestand in de array leest. Als je toch data naar het scherm wilt schrijven kun je hiervoor std::cout of printf() gebruiken.
 
Thanks, Je leest nu eerst het .txt bestand uit als string en dan buffer je hem naar een integer toe. En schrijft hem daarna weg naar het array A. Nu heb ik nu op bepaalde punten een std::cout << "test.\n"; uitgevoerd maar kan helaas niet de inhoud van de array A uitlezen. Misschien doe ik wel iets fout:confused:
 
Misschien doe ik wel iets fout:confused:

Dat zit er dik in. :p
(als je de code zelf ook gepost had dan zou er ook verteld kunnen worden wat je fout doet)

[cpp]
int main()
{
std::ifstream in("bestand.txt");
if (in.is_open()) {
int A[12][6], x = 0, y = 0; // A is alleen binnen het if-statement bekend
std::string temp;
while(in >> temp && x < 12) {
A[x][y] = atoi(temp.c_str());
if (++y > 5) x++, y = 0;
}
in.close();
for(int i = 0; i < 12; i++) {
for(int j = 0; j < 6; j++) {
std::cout << A[j] << ' ';
}
std::cout << '\n';
}
}
system("PAUSE");
return 0;
}
[/cpp]

Het bovenstaande zou moeten werken.
 
Ik zie al waar ik het fout heb gedaan, maar echt super bedankt voor je hulp:thumb: Kan weer verder.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan