Froya Skrevet 20. oktober 2007 Del Skrevet 20. oktober 2007 (endret) Har debugget og steppet i time etter time nå. Er normalt fan av å finne ut av feil i koden selv. Da jeg lærer en stor del mer av dette. Men nå føler jeg tiden er kommet til å krype til korset. Har en funksjon som inneholder en do-while løkke. (Hele løkken ligger i do-while.txt som jeg la ved). I nevnt funksjon har jeg 2 char arrays; FName[] og Name2[]. Problemet ligger i første forløkken nedenfor her. Når Name2[f] blir satt til en bokstav, la oss si 'C'. Som blir hentet fra NameContainer[m,f] så endres samtidig FName seg til det samme. Om index 2 i Name2 blir 'E', så blir index2 i FName også 'E'. Osv. Dette skjer for hver iterasjon i forløkken. Altså _Før_ if segmentet nedenfor. Har helt ærlig ingen clue om hva som er feil, eneste jeg kan tenke meg det kan være er noe minnereferanse kluss.. Men ser ikke helt hvor det skulle oppstått. do { ... for (int f = 0; f < 12; f++) FName[f] = NameContainer[m, f]; for (int i = 0; i < 5999; i++) { for (int j = 0; j < 12; j++) Name2[j] = NameContainer[i, j]; if (First(FName, Name2) == false) FName = Name2; } ... } Limte inn "problemkoden" her, resten av do-while løkken ligger nedenfor: do{ //Sorterer navna og bygger return string. int i = 0; int j = 0; for (int f = 0; f < 12; f++) //Finner første navn FName[f] = NameContainer[m, f]; for (i = 0; i < 5999; i++) { for (j = 0; j < 12; j++) Name2[j] = NameContainer[i, j]; //Finner andre navn if (First(FName, Name2) == false) FName = Name2; } for (int g = 0; g < FName.Length; g++) firstName += Convert.ToString(FName[g]); for(int o = 0; o < 13; o++) NameContainer[i, o] = ','; for (int q = 0; q < Name2.Length; q++) Name2[q] = ','; if (m != 0 && firstName.Length > 2) finishSorting += ",\""; if(firstName.Length > 2) for (int e = 0; e < firstName.Length; e++) if (firstName[e] != ',' && firstName != "") finishSorting += Convert.ToString(firstName[e]); if (firstName != "") finishSorting += "\""; firstName = ""; m++; prgb.Value = m/55; }while(m != 5500); Limer like gjerne inn hele funksjonen også, om det er til noe hjelp. public string SortNames(ProgressBar prgb) { string sortedNames = ""; string finishSorting = "\""; string firstName = ""; bool EndOfName = true; int counter = 0; char[] Name = { ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',' }; char[] Name2 = { ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',' }; char[] FName = { ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',' }; char[] TempName = { ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',' }; char [,] NameContainer = new char [6000, 13]; StreamReader str = new StreamReader("Names.txt"); sortedNames = str.ReadLine(); int b = 0; do //Stapper navn i navnecontaineren. { if (sortedNames[counter] == '"' && EndOfName == true) { EndOfName = false; int i = 0; do { counter++; Name = sortedNames[counter]; i++; } while (sortedNames[counter] != '"'); while (i < 12) { Name = '.'; i++; } } EndOfName = true; counter++; if (sortedNames[counter] == ',') { for (int i = 0; i < Name.Length; i++) NameContainer[b, i] = Name; b++; } } while (sortedNames[counter] != '@'); int m = 0; do{ //Sorterer navna og bygger return string. int i = 0; int j = 0; for (int f = 0; f < 12; f++) //Finner første navn FName[f] = NameContainer[m, f]; for (i = 0; i < 5999; i++) { for (j = 0; j < 12; j++) Name2[j] = NameContainer[i, j]; //Finner andre navn if (First(FName, Name2) == false) FName = Name2; } for (int g = 0; g < FName.Length; g++) firstName += Convert.ToString(FName[g]); for(int o = 0; o < 13; o++) NameContainer[i, o] = ','; for (int q = 0; q < Name2.Length; q++) Name2[q] = ','; if (m != 0 && firstName.Length > 2) finishSorting += ",\""; if(firstName.Length > 2) for (int e = 0; e < firstName.Length; e++) if (firstName[e] != ',' && firstName != "") finishSorting += Convert.ToString(firstName[e]); if (firstName != "") finishSorting += "\""; firstName = ""; m++; prgb.Value = m/55; }while(m != 5500); finishSorting += "@"; return finishSorting; } Kanskje et poeng å nevne at 70% av koden ble skrevet i lettere alkoholrus. Men etter time på time med edru debugging klarer jeg ikke forstå hva feilen er. Tror feilen er lokalisert i øverstekodebit jeg limte inn. Målet med funksjonen er forøvrig å returnere en string med navn som er ferdig sortert i alfabetisk rekkefølge. Navnene blir først funnet lest inn fra txt fil til NameContainer. Håper på svar^^ do_while.txt Endret 20. oktober 2007 av Froya Lenke til kommentar
j000rn Skrevet 20. oktober 2007 Del Skrevet 20. oktober 2007 (endret) Jeg har litt problemer med å forstå hva du egentlig prøver på. Men for å få en liste over personer sortert ville jeg gjordt det på denne måten (mer eller mindre -- ikke testet): List<Person> AlleFolka = new List<Person>(); // Les inn fra fil og populer: AlleFolka.Add(new Person("Åge", "Aleksandersen")); AlleFolka.Sort(delegate(Person p1, Person p2) { return string.Compare(p1.LastName + p1.FirstName, p2.LastName + p2.FirstName); } ); // Klasse for hver person: internal class Person { private string _FirstName; public string FirstName { get { return _FirstName; } set { _FirstName = value; } } private string _LastName; public string LastName { get { return _LastName; } set { _LastName = value; } } public Person(string first, string last) { FirstName = first; LastName = last; } } Endret 20. oktober 2007 av jorn79 Lenke til kommentar
Manfred Skrevet 20. oktober 2007 Del Skrevet 20. oktober 2007 Hvorfor i HÆLVETE bruker du char-arrays? Og i tillegg av fast størrelse? Hva ble plutselig utrolig idiotisk med stringer? Lenke til kommentar
j000rn Skrevet 20. oktober 2007 Del Skrevet 20. oktober 2007 Hvorfor i HÆLVETE bruker du char-arrays? Og i tillegg av fast størrelse? Hva ble plutselig utrolig idiotisk med stringer? Greit om alle folka har akuratt like langt navn da tja... Lenke til kommentar
GeirGrusom Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 Du kan få en rekke problemer med dette, én ting er at en unicode bokstav ikke nødvendigvis tar en char (UTF-16) en annen ting er at du får fixed størrelse på hvert navn, en tredje er at dette blir fryktelig innviklet i forhold til det som er nødvendig. Koden ser ut til å være skrevet i full narkose jorn har vel løst hele problemet ville jeg tro. Lenke til kommentar
steingrim Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 én ting er at en unicode bokstav ikke nødvendigvis tar en char (UTF-16) (...) Litt offtopic, men hva mener du med det egentlig? Forøvrig enig i at det må være skrevet i full narkose. Minst. Lenke til kommentar
GeirGrusom Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 Noen spesielle bokstaver kan ta 2 char (4 byte) derfor skal man ikke bruke Char[] for å lagre tekststrenger, men heller bruke string. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå