Moduler>GUI-komponenter>Tekstformat
Tekstformat
Koding av tekst kan skape mye hodebry dersom vi skal forholde oss til materiale som i utgangspunktet er kodet på forskjellig måte. Kanskje vi henter noe fra en nettressurs eller kanskje vi har laget noe i en editor som ikke har lagret akkurat som vi har tenkt. Wikipedia's oversikt [1] kan være et sted å starte for en enkel innføring.
Det er fire hovedfunksjoner som er beskrevet:
- opplasting av en tekst fra en ressurs i programmet
- lasting av en tekst fra fil, med eller uten encoding
- konvertering av en tekst
- lagring av en tekst, med eller uten encoding
For å kunne bruke dette programmet til noe nyttig bør du sette opp en editor for å undersøke/initirere de data programmet jobber mot, og du må endre i kode. Encodingen er som du ser nedenfor hardkodet.
Lasting av ressurs
private void buttonInit_Click(object sender, EventArgs e)
{
textBox1.Text = Properties.Resources.LittText;
}
Lasting av fil
private void buttonLoad_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "txt files (*.txt)|*.txt";
openFileDialog1.InitialDirectory = @"c:\temp";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string filename = openFileDialog1.FileName;
FileStream fs = new FileStream(filename, FileMode.Open);
StreamReader sr;
if (sender.Equals(buttonLoad))
{
//without encoding
sr = new StreamReader(fs);
}
else
{
// with encoding: iso-8859-1
sr = new StreamReader(fs, Encoding.GetEncoding("iso-8859-1"));
}
textBox1.Text=sr.ReadToEnd();
sr.Close();
}
}
Konvertering
private string setEncoding(string originalS, string oldEnc,string newEnc)
{
// Create encodings.
Encoding oldE = Encoding.GetEncoding(oldEnc);
Encoding newE = Encoding.GetEncoding(newEnc);
// Need to handle the string as a byte[].
byte[] originalBytes = oldE.GetBytes(originalS);
// convert.
byte[] newBytes = Encoding.Convert(oldE, newE, originalBytes);
// Convert the new byte[] into a char[] and then into a string.
char[] newChars = new char[newE.GetCharCount(newBytes, 0, newBytes.Length)];
newE.GetChars(newBytes, 0, newBytes.Length, newChars, 0);
string newString = new string(newChars);
return newString;
}
private void buttonConvert_Click(object sender, EventArgs e)
{
textBox1.Text = setEncoding(textBox1.Text, "iso-8859-1", "utf-8");
}
Lagring
private void buttonSave_Click(object sender, EventArgs e)
{
if (textBox1.TextLength == 0)
return;
saveFileDialog1.Filter = "txt files (*.txt)|*.txt";
saveFileDialog1.InitialDirectory = @"c:\temp";
if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)
{
string filename = saveFileDialog1.FileName;
FileStream fs = new FileStream(filename, FileMode.Create);
StreamWriter sw;
if (sender.Equals(buttonSave))
{
// without encoding
sw = new StreamWriter(fs);
}
else
{
// with encoding: iso-8859-1
sw = new StreamWriter(fs,Encoding.GetEncoding("iso-8859-1"));
}
sw.Write(textBox1.Text);
sw.Close();
}
}












