21. november 2008 - 18:11Der er
19 kommentarer og 1 løsning
Arbejde med string og string[]
Jeg er lige startet med C# og har problemer med syntaxen i nedenstående kode.
Koden skal være en funktion der modtager 2 parametre. En string med (resten) af en linie fra en kommasep. fil og selve seperatoren.
Funktionen skal fjerne og returnere næste felt i linien.
Koden er spækket med syntax fejl men det jeg i første omgang ønsker svar på er problemer omkring (S[P] == chr(34)) og en forklaring på hvordan selve funktionen skal se ud for at returnere en string.
public static string EatNextField(string S, char Sep); { bool QFlag; int P; bool EOField; bool Result;
Result = ""; P = 0; if (S.Length > 0) { QFlag = (S[P] == chr(34)); if QFlag = true { P++; } EOField = false; while !EOField do { if not QFlag { EOField = (S[P] == Sep); if not EOField then Result = Result + S[P]; } else { if (S[P] == chr(34)) { if (P < Length(S)) and (S[P + 1] = chr(34)) { Result = Result + S[P]; P++; } else { if (P >= Length(S)) or (S[P + 1] == Sep) { EOField = true; P++; } else Result = Result + S[P]; } else { Result = Result + S[P]; } } // end else P++; if !EOField { if !QFlag { EOField = (P > S.Length) // ? } else { EOField = (P >= S.Length); } if EOField { P++; } } } // while S.Delete(1, P - 1); } return Result; }
funktionen er del af en kode der anvendes til at indlæses en linie fra en kommasep. fil og overføre den til en Collection, som gør det nemmere at arbejde med de enkelte felter i linien. Funktionen anvendes til at "æde" et felt af gangen fra den læste linie.
Der findes sikkert nemmere metoder i C# men i første omgang er det blot for at få en forståelse af syntaxen.
Du har sikkert ret i at det stammer fra et eller andet længere oppe i koden.
Starten ser ud som nedenstående. (Jeg anvender C# 2008 Express) Til venstre for koden kan jeg se nogle lodrette streger. Stregerne der starter ved namespace stopper lidt for tidligt i koden. Jeg har noteret det i koden. Som om namespace ikke dækker mere.
using System; using System.Collections.Generic; using System.Linq; using System.Text;
public static string EatNextField(ref string S, char Sep); { bool QFlag; int P; bool EOField; bool Result;
Result = ""; P = 0; if (S.Length > 0) { QFlag = (S[P] == '"'); if QFlag = true { P++; } EOField = false; while !EOField do { if not QFlag { EOField = (S[P] == Sep); if not EOField then Result = Result + S[P]; } else { // Her går namespace myfilesio til if (S[P] == chr(34)) { if (P < Length(S)) and (S[P + 1] = chr(34)) { Result = Result + S[P]; P++; } else { // Her går namespace WindowsFormsApplication1 til
En mere korrekt sammenligning af chars, ville være at bruge equals funktionen..
QFlag = (S[P] == '"');
Bliver til:
QFlag = S[P].Equals("");
Du spørger hvordan funktionen skal se ud, hvis den skal returnere en streng:
Du angiver selv i "oprettelsen" af funktionen, at den skal returnere en string. I slutning (eller hvor du nu end vil have retuneringen, skriver du blot return Result, antaget at Result er hvad du vil returnere!
Takker for svarene - kom selv videre da jeg fandt ud af at et namespace skal indledes med en "class ???" uden public/static foran. Som du skrev arne - > Måske er fejlen længere oppe i koden end hvor man tror. (Smid et svar) Her efter kunne jeg følge kompilerens fejlmeddelelser og komme videre.
Som sagt er det første gang jeg har siddet med C# kode - men det lykkes mig da at lave et par (string)funktioner, oprette dynamiske komponenter og hente data fra en mySQL database via nettet.
I Java skal man bruge .equals for String, men == virker fint for char.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.