Documentos de Académico
Documentos de Profesional
Documentos de Cultura
6 FCL
6 FCL
System.IO
Este espacio de nombres lo comprenden las clases que facilitan el acceso a ficheros. La construccin principal que usan es el stream Clases de tipo Stream, como FileStream, son bsicas
.NET tambin provee construcciones ms sofisticadas en forma de Readers y Writers
Permite acceder tanto a ficheros de texto (a travs de TextWriter y TextReader) como a binarios (BinaryWriter y BinaryReader).
System.IO
El procedimiento para leer o escribir un fichero es:
1. 2. Abrir el fichero usando el objeto FileStream Para lecturas o escrituras binarias, crear un BinaryReader y BinaryWriter alrededor de FileStream, y llamar a mtodos Read y Write Para lecturas o escrituras de texto, crear un StreamReader y StreamWriter alrededor de FileStream, y llamar a mtodos ReadLine y WriteLine Cerrar el FileStream
3.
4.
}
}
// Convierte la clave pasada en un array de bytes ASCIIEncoding enc = new ASCIIEncoding (); byte[] keybytes = enc.GetBytes (key);
Colecciones
La plataforma .NET tiene un espacio de nombres dedicado a estructuras de datos como pilas, arrays dinmicos, colas... System.Collections dispone de una serie de interfaces que implementan todas estas colecciones.
Colecciones
Entre otras estructuras podemos encontrar:
ArrayList: Array dinmico. HashTable: Tablas de Hashing. Queue: Colas. SortedList: Listas ordenadas. Stack: Pilas. BitArray: array de bits (guardan booleanos)
Ejemplo WordCount
// ejecutar: WordCount <fichero-en-que-contar-palabras> using System; using System.IO; using System.Collections; class WordCount { static void Main (string[] args){ // Validar si se ha introducido un nombre fichero if (args.Length == 0) { Console.WriteLine ("Error: Missing file name"); return; } StreamReader reader = null; Hashtable table = new Hashtable (); // crear mapa
Ejemplo WordCount
try { // Moverse palabra a palabra por el fichero // manteniendo un contador por cada palabra reader = new StreamReader (args[0]); for (string line = reader.ReadLine (); line != null; line = reader.ReadLine ()) { string[] words = GetWords (line); foreach (string word in words) { string iword = word.ToLower (); if (table.ContainsKey (iword)) table[iword] = (int) table[iword] + 1; else table[iword] = 1; // crear entrada } }
Ejemplo WordCount
// Ordenar entradas tabla con SortedList SortedList list = new SortedList (table); // Visualiza los resultados Console.WriteLine ("{0} palabras nicas en {1}", table.Count, args[0]);
foreach (DictionaryEntry entry in list) Console.WriteLine ("{0} ({1})", entry.Key, entry.Value); } catch (Exception e) { Console.WriteLine (e.Message); } finally { if (reader != null) reader.Close (); } }
Ejemplo WordCount
static string[] GetWords (string line) { // Crear un array para guardar resultados intermedios ArrayList al = new ArrayList (); // Aadir palabras desde line a al int i = 0; string word; char[] characters = line.ToCharArray (); while ((word = GetNextWord (line, characters, ref i)) != null) al.Add (word); // Return a static array that is equivalent to the ArrayList string[] words = new string[al.Count]; al.CopyTo (words); return words; }
Ejemplo WordCount
static string GetNextWord (string line, char[] characters, ref int i) { // Encontrar comienzo de palabra while (i < characters.Length && !Char.IsLetterOrDigit (characters[i])) i++; if (i == characters.Length) return null; int start = i; // Find the end of the word while (i < characters.Length && Char.IsLetterOrDigit (characters[i])) i++; // Return the word return line.Substring (start, i - start); }
System.XML
Este espacio de nombres comprende todas las clases necesarias para manejar documentos Xml. Permite leer o parsear un documento, as como escribir un documento Xml. Para ello necesitaremos conocer previamente la estructura de un documento Xml.
System.XML
Este espacio de nombres provee soporte para los
estndares de procesamiento XML:
XML 1.0 - http://www.w3.org/TR/1998/REC-xml-19980210 including DTD support. XML Namespaces - http://www.w3.org/TR/REC-xml-names/ both stream level and DOM. XSD Schemas - http://www.w3.org/2001/XMLSchema XPath expressions - http://www.w3.org/TR/xpath XSLT transformations - http://www.w3.org/TR/xslt DOM Level 1 Core - http://www.w3.org/TR/REC-DOM-Level-1/ DOM Level 2 Core - http://www.w3.org/TR/DOM-Level-2/
Un poco de XML
Lenguaje mundial de facto para intercambio de datos XML no tiene tanto xito porque es un gran lenguaje, sino porque las herramientas disponibles para leer, escribir y manipular XML son muy comunes Casi todos los parseadores de XML implementan una de dos APIs:
DOM: lee un documento en memoria y lo carga en un rbol SAX: API basada en eventos
XmlDocument
Interfaz programtica para XML documents que conforman con la especificacin DOM Mtodo Load(nombre-doc) procesa el documento y construye un rbol del mismo Una llamada exitosa es normalmente seguida de invocacin a propiedad DocumentElement
Para saber si tiene hijos usar propiedad HasChildNodes Propiedad ChildNodes devuelve los hijos de un nodo
Todo hijo es un XMLNode que puede ser del tipo Element, Text, Attribute, etc.
XmlTextReader
Frente al estndar SAX, .NET ofrece XmlTextReader Est basado en streams como SAX y es por tanto ms eficiente con el uso de memoria que DOM Usa un mecanismo pull para examinar Xml en vez de push como SAX
Ejemplo XmlTextReader I
Lee un fichero XML y visualiza todos sus nodos
<?xml version="1.0"?> <!-- This is a sample XML document --> <!DOCTYPE Items [<!ENTITY number "123">]> <Items> <Item>Test with an entity: &number;</Item> <Item>test with a child element <more/> stuff</Item> <Item>test with a CDATA section <![CDATA[<456>]]> def</Item> <Item>Test with an char entity: A</Item> <!-- Fourteen chars in this element.--> <Item>1234567890ABCD</Item> </Items>
Ejemplo XmlTextReader II
public class Sample { private const String filename = "items.xml"; public static void Main() { XmlTextReader reader = null; try { // Cargar reader con fichero XML ignorando espacios. reader = new XmlTextReader(filename); reader.WhitespaceHandling = WhitespaceHandling.None; // Procesar fichero y visualizar cada nodo while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: Console.Write("<{0}>", reader.Name); break; case XmlNodeType.Text: Console.Write(reader.Value); break; case XmlNodeType.CDATA: Console.Write("<![CDATA[{0}]]>", reader.Value); break;
Ejemplo XmlTextReader IV
case XmlNodeType.EntityReference: Console.Write(reader.Name); break; case XmlNodeType.EndElement: Console.Write("</{0}>", reader.Name); break; } } } finally { if (reader!=null) reader.Close(); } } } // Final clase
Transformaciones XSLT
XSLT (Extensible Stylesheet Language Transformations) es un lenguaje para convertir documentos XML de un formato en otro Tiene dos usos principales:
Convertir documentos XML en HTML Convertir documentos XML en otros documentos XML
Este tipo de conversiones son el ncleo de aplicaciones middleware como Microsoft BizTalk Server.
System.Reflection
Este espacio de nombres proporciona clases para:
Conseguir todos los tipos de datos que hay en un ensamblado (System.Reflection.Assembly). Listar los miembros de esos tipos de datos (System.Reflection.Module y System.Type). Invocar mtodos dinmicamente.
Ejemplo System.Reflection
// fichero : reflect.cs // compilar : csc reflect.cs
using System; using System.Reflection; using System.Text.RegularExpressions; public class Persona {
Ejemplo System.Reflection
public void VerNombre() { Console.WriteLine(Nombre={0}", Nombre); } public void VerApellido1() { Console.WriteLine(Apellido1={0}", Apellido1); } public void VerTodos() { Console.WriteLine("Persona..."); Console.WriteLine(Nombre={0}", Nombre); Console.WriteLine(Apellido1={0}", Apellido1); } public readonly string Nombre; public readonly string Apellido1; }
Ejemplo System.Reflection
public class Reflect { public static void Main() { // recuperar tipo Persona ... Type typ = Type.GetType(Persona"); // crear array con args constructor... object[] args = {Diego", Ipia"}; // crear una instancia de Persona ... Object obj = Activator.CreateInstance(typ, args); // conseguir lista mtodos Persona ... MethodInfo[] met = typ.GetMethods();
Ejemplo System.Reflection
// encontrar e invocar todos los mtodos ver... Regex r = new Regex("^ver", RegexOptions.IgnoreCase); foreach (MethodInfo m in met) if (r.IsMatch(m.Name)) m.Invoke(obj, null); // invocar mtodo ver
} }
System.GC
Esta clase representa al recolector de basura que maneja el CLR de la plataforma. Implementa una serie de mtodos que nos permiten:
Forzar la recoleccin de basura. Evitar que se ejecute el destructor de un objeto determinado.
System.Web y System.Net
System.Net provee clases para llevar a cabo tareas relacionadas con Internet System.Net.Sockets permite la comunicacin a travs de Sockets System.Web, System.Web.Mail y System.Web.Services, estn construidas encima de System.Net