Kezdőoldal » Számítástechnika » Programozás » Eléggé kezdő vagyok összeségéb...

Eléggé kezdő vagyok összeségében nem csak C#-ban, hanem úgy programozás terén is, de nem igazán értem mi a baj a kódommal?

Figyelt kérdés

Szóval azt a feladatot kaptuk, hogy egy szöveges állományból olvassunk be adatokat, és végezzünk el rajta egy pár lekérdezést, pl. egy felhasználó által kiválasztott sportoló hány kilómétert fog futni a héten, meg hogy mennyi a kerékpáron teljesítendő táv összesen az adott héten. Ezekkel nincs probléma, már megírtam rá a meetódusokat, de a beolvasással van egy kis problémám.

A szöveges fájlt így kell elképzelni:


@Kiss_József#Futás!Szerda:14

@Nagy_Imre#Úszás!Kedd:12

@Kiss_József#Úszás!Kedd:6


Mivel ki kell iratni is az egész állományt a képernyöre a következő formátumban:

Név: Kiss József; sportág: futás; nap: szerda; táv: 14

ezért arra gondoltam, hogy úgy olvasom be az adatokat, hogy 4 külön tömböt generálok (név, sportág, nap, táv)

amikben eleve már a helyes formátumban tárolok minden adatot (tehát a névtömbben a @ és _ jel nélkül,

és ugyanígy a többiben. A gond az, hogy a következő kódban futásidejő hiba keletkezik:

static string [] NameArrayGen (string [] fulltext)

{

string [] namearray=new string [fulltext.Length];

int atpos=0;

string line;

for (int i = 0; i < fulltext.Length; i++)

{

line = fulltext[i];

Console.WriteLine(line);


for (int j = 0; j <line.Length; j++) //A LINE.LENGTHNÉL EZT ÍRJA: Object reference not set to an instance of an object.

if (j == '@')

atpos++;

line = line.Remove(atpos, 1);

line = line.Replace("_", " ");

int k = 0;

while (line [k]!='#')

{

namearray[k] = line;

k++;

}


}

return namearray;

}


Szóval nem értem mi a baj, mert tulképp csak anyit csinálok, hogy a line-nal beállítom, hogy mindid az egész beolasott szöveg aktuélis sora legyen, ami ugyebár string típusú, és a line.Length-el a hosszát kérdezem le. Miért nem engedi ezt?

Nagyon sürgős lenne, mert kedden zh-t írunk, és mindig ilyesmi problémába ütközök, fájlbeolvasáskor.



2014. okt. 19. 13:28
 1/5 anonim ***** válasza:

A fulltext tömbödben van egy null értékű elem is.

Másolt be az a kódrészt is, ahol meghívod a NameArrayGen metódust, ott lesz a probléma!


továbbá:

if (j == '@')

A j egy ciklusváltozó, ne azt használd, hanem a line j-edik karakterét.

2014. okt. 19. 15:46
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

Még a kirató függvény (ami most csak a névtömböt írja ki a többi adatot nem):

static void EditedToDisp(string[] namearray)

{

for (int i = 0; i < namearray.Length; i++)

Console.WriteLine("Név: {0}", namearray[i]);

}


és a hívás:

EditedToDisp(NameArrayGen(FileOpen("sport.txt")));

2014. okt. 19. 21:42
 3/5 A kérdező kommentje:

Ja és persze a fájlmegnyitó metódust lefelejtettem. Az pedig így néz ki:

static string[] FileOpen(string filename)

{

string[] fulltext = new string[100];

string line = "";

StreamReader sr = new StreamReader(filename);

int i = 0;

while (!sr.EndOfStream)

{

line = sr.ReadLine();

fulltext[i] = line;

i++;

}

return fulltext;

}


Lehet hogy ebben nyitottam meg eleve rosszul a fájlt?

2014. okt. 20. 08:20
 4/5 anonim ***** válasza:

Az olvasó függvény helyett logikusabb lenne: [link]


Aztán a sorokat csak Split-elni kell. [link]


Például:

string s = "@Kiss_József#Úszás!Kedd:6";

string[] split = s.Split(new char[] { '@', '#', '!', ':' }, StringSplitOptions.RemoveEmptyEntries);


és így a "split" tömbben egymás után benne lesznek az adatok.

2014. okt. 20. 15:43
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Köszönöm, müxik :D
2014. okt. 20. 21:23

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!