CheatEnabled Skrevet 25. mai 2008 Rapporter Del Skrevet 25. mai 2008 Jeg jobber med et prosjekt som går client-serverwise, der klienten sender data til server, som serveren igjen parser. Jeg har et par spørsmål ang. selve parsingen av strings, og hvordan man får skrevet om stringen til en fil. Dette er koden jeg har så langt: private void textBox1_TextChanged(object sender, EventArgs e) { char[] delimiter = { ',' }; string[] words = textBox1.Text.Split(delimiter); TextWriter tw = new StreamWriter(words[0] + " vs " + words[1] + ".txt"); foreach (string s in words) { tw.WriteLine(s); } } Filen blir laget med riktig navn, men det er ingenting i den. Jeg har prøvd flere forskjellige ting, men etter flere søk i MSDN og på Google, fant jeg ut at dette var den beste måten å gjøre det på. Men som sagt, tekstfilen er tom. En annen ting jeg lurer på, er hvordan jeg kan lete etter spesielle elementer i en string, f.eks. at alt som kommer mellom "$" og "," leses av som en ting, mens alt mellom "%" og "," leses av som noe annet. Jeg er ikke så veldig god til å programmere enda, så noen ekstremt hightech-løsninger er ikke det jeg ser etter. På forhånd takk. Lenke til kommentar
Manfred Skrevet 25. mai 2008 Rapporter Del Skrevet 25. mai 2008 using(StreamWriter sw = new StreamWriter(filename)) { sw.WriteLine(textToWrite); } Lenke til kommentar
CheatEnabled Skrevet 25. mai 2008 Forfatter Rapporter Del Skrevet 25. mai 2008 Fungerer det å bruke en int som man øker jevnt for å skrive? foreach (string s in words) { int i= 0; tw.WriteLine(words[i++]); } Dette skriver heller ikke noen tekst til filen, men har dere noen annen måte å gjøre det på som fungerer? Manfred, skjønte ikke helt hvor du ville med innlegget ditt. Jeg ser ikke helt hvordan det skal hjelpe å gjøre det sånn du skriver, i og med at jeg har et array. Lenke til kommentar
HDSoftware Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 Fungerer det å bruke en int som man øker jevnt for å skrive? foreach (string s in words) { int i= 0; tw.WriteLine(words[i++]); } Dette skriver heller ikke noen tekst til filen, men har dere noen annen måte å gjøre det på som fungerer? Manfred, skjønte ikke helt hvor du ville med innlegget ditt. Jeg ser ikke helt hvordan det skal hjelpe å gjøre det sånn du skriver, i og med at jeg har et array. Din kode hadde ingen CLOSE på streamwriter objektet og innholdet i filen blir dermed ikke skrevet til filen. Tipper derfor at det eneste du hadde trengt å gjøre var å legge til en linje etter løkka di: tw.close() Manfreds forslagg er å innkapsle koden som skal kjøre mot streamwriter objektet. Ved å gjøre det slik som han sier så trenger du ikke instansere objektet. Du trenger heller ikke tenke på dispose for det sørger også USING for at skjer,. Kall det et nytt SCOPE om du vil. Men når det er sagt så tror jeg heller ikke at dette forslaget hjelper deg. Sett på en CLOSE du så virker det nok. Lenke til kommentar
GeirGrusom Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 { } er alltid et nytt scope en kan faktisk også bruke { } uten at det er forbundet med noe Behold! int a = 100; { int b = 50; } // b er out of scope Men det er off-topic Du burde bruke regular expressions for å lese sånn tekst. System.Text.RegularExpressions.RegEx Lenke til kommentar
HDSoftware Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 (endret) { } er alltid et nytt scope en kan faktisk også bruke { } uten at det er forbundet med noe Behold! int a = 100; { int b = 50; } // b er out of scope Men det er off-topic Du burde bruke regular expressions for å lese sånn tekst. System.Text.RegularExpressions.RegEx Sannelig. Du har helt rett. Har ikke tenkt på akkurat det før nå, men det er jo helt riktig. Oppretter man en variabel inne i { } så finnes jo ikke den på utsiden. Dette er faktisk genialt. Jeg er ikke vant til det fra Clarion for der er dette fullstendig mulig: Kalkuler PROCEDURE i INT code loop i = 1 to 100 o# += i End!Loop Message('Verdien o# er:' & o#) Vi har eget datadeklareringsområde i Clarion, men muligheten for å bruke implisitte variabler, som # indikerer. # i dette tilfellet anntyder bare at det er LONG Men poenget ditt er helt rett. Gir mange muligheter som jeg ikke er vant til. /OFFTOPIC Endret 26. mai 2008 av HDSoftware Lenke til kommentar
GeirGrusom Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 Er ikke Clarion 16-bit? Lenke til kommentar
Manfred Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 Poenget mitt var at man bør etterstrebe bruk av using(){}, og at ejg skjønner ikke hvorfor man skal ha en TextWriter når man kan skrive direkte med en StreamWriter. Det blir nok skrevet til filen når den closes, som det ble sagt ja, men dette vil også gjøre automatisk dersom du har et using-scope rundt den. Jeg gidder ikke skrive komplett kode, jeg sparker i rett retning, så får folk ta til seg det jeg sier eller ikke. Lenke til kommentar
GeirGrusom Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 StreamReader : TextReader, TextReader er en abstrakt klasse og helt unødvendig å bruke. Lenke til kommentar
HDSoftware Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 Poenget mitt var at man bør etterstrebe bruk av using(){}, og at ejg skjønner ikke hvorfor man skal ha en TextWriter når man kan skrive direkte med en StreamWriter. Det blir nok skrevet til filen når den closes, som det ble sagt ja, men dette vil også gjøre automatisk dersom du har et using-scope rundt den. Jeg gidder ikke skrive komplett kode, jeg sparker i rett retning, så får folk ta til seg det jeg sier eller ikke. Jeg gjettet på at dette var ditt poeng og gjettet også på at ved å fremtvinge en DISPOSE så blei også filene lukket, men løsningn på hans problem lå i en mangel på forståelse av hvorfor det feilet. Når det er sagt, hvorfor bør man etterstrebe bruken av USING? Er det fordi den sørger for DISPOSE på en skikkeligere måte en hva GCn gjør? Lenke til kommentar
steingrim Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 using er bare syntaktisk sukker for try/finally using (Foo foo = new Foo()) { // ... } er det samme som Foo foo = null; try { foo = new Foo(); // ... } finally { foo.Dispose(); } Lenke til kommentar
GeirGrusom Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 Høh, det stemmer nesten helt forbløffende, det var jeg ikke klar over. static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { using (DisposableObject obj = new DisposableObject()) { obj.ShowHelloWorld(); } DisposableObject dobj = new DisposableObject(); try { dobj.ShowHelloWorld(); } finally { dobj.Dispose(); } } } .method private hidebysig static void Main() cil managed { .entrypoint .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) // Code size 46 (0x2e) .maxstack 1 .locals init ([0] class IlGenTest.DisposableObject obj, [1] class IlGenTest.DisposableObject dobj) IL_0000: newobj instance void IlGenTest.DisposableObject::.ctor() IL_0005: stloc.0 .try { IL_0006: ldloc.0 IL_0007: callvirt instance void IlGenTest.DisposableObject::ShowHelloWorld() IL_000c: leave.s IL_0018 } // end .try finally { IL_000e: ldloc.0 IL_000f: brfalse.s IL_0017 IL_0011: ldloc.0 IL_0012: callvirt instance void [mscorlib]System.IDisposable::Dispose() IL_0017: endfinally } // end handler IL_0018: newobj instance void IlGenTest.DisposableObject::.ctor() IL_001d: stloc.1 .try { IL_001e: ldloc.1 IL_001f: callvirt instance void IlGenTest.DisposableObject::ShowHelloWorld() IL_0024: leave.s IL_002d } // end .try finally { IL_0026: ldloc.1 IL_0027: callvirt instance void IlGenTest.DisposableObject::Dispose() IL_002c: endfinally } // end handler IL_002d: ret } // end of method Program::Main Lenke til kommentar
steingrim Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 (endret) Eneste forskjellen er vel at den castes til IDisposable, noe jeg glemte å gjøre. Edit: den castes jo ikke, men den gjør callvirt. Endret 26. mai 2008 av steingrim Lenke til kommentar
GeirGrusom Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 (endret) edit: jeg som leste feil dette er den eneste forskjellen: IL_000e: ldloc.0 IL_000f: brfalse.s Den henter pekeren til obj fra stacken, men hva brfalse.s gjør, aner jeg ikke :S Endret 26. mai 2008 av GeirGrusom Lenke til kommentar
HDSoftware Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 (endret) Er ikke Clarion 16-bit? Ja, men det har strengt tatt ingen betydning om IDE er 16, 32 eller 64 bit Maskinkoden som genereres er optimal 32bit. Kompilatoren til Clarion er TopSpeeds kompilator som kompilerer C++, C, Clarion og Modula-2, men selve språget Clarion har ikke scope på innsiden av en prosedyre eller rutine. (nesten:) Man kan selvsagt definere klasser etc. inne i en prosedyre, som vil få egne scope, men strengt tatt er en metode kunn en prosedyre i Clarion. Eneste forskjell på en metode og en prosedyre i Clarion er at det første parametere inn i prosedyren alltid er selve klassen. Dette parameteret er selvasagt gjemt for utvikleren, men dette er to ekvivalente måter å kalle metoder på i Clarion MyObject.MyMethods(SomeParms) MyMethod(MyObject, SomeParms) Tror vi har Hijacket en tråd her ;-) Endret 26. mai 2008 av HDSoftware Lenke til kommentar
GeirGrusom Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 (endret) Hehe Det funker i D også void SomeFunction(int[] arr) { // .. etc } int[] array; array.SomeFunction(); SomeFunction(array); D er et forbanna bra språk edit: Hijack! Endret 26. mai 2008 av GeirGrusom Lenke til kommentar
HDSoftware Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 Så bra. Funker altså i C# og D. Har du prøvd E? (knis) Lenke til kommentar
GeirGrusom Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 hehe D har nested functions også int A() { int B() { A(); } } og rekursive funksjoner int RecursiveFunction()() { // Something } og en hel rekke andre ting Lenke til kommentar
HDSoftware Skrevet 26. mai 2008 Rapporter Del Skrevet 26. mai 2008 hehe D har nested functions også Haha. Måtte jo sjekke opp. Var faktisk ikke klar over at det var noe som het D. Avart fra C++ skjønner jeg. Hvilken Eclipse plugin bruker du da? hehe - Mmrnmhrm kansje? Tøfft navn ;-) Kunne enkelt vært hentet fra en av de kule navnene i Hitchikers guide.... 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å