C sharp - Posicionarse directo a una línea de un archivo ASCII por CCHAR

   
Vista:

Posicionarse directo a una línea de un archivo ASCII por CCHAR

Publicado por Juan Carlos Valverde I. (1 intervención) el 03/09/2013 05:53:46
Hola a todos:

Necesito saber que instrucción o rutina usar para posicionarme directame en una línea de un archivo secuencial ASCII o TXT. Ejemplo: Si tengo un archivo de 10 registros y quiero posicionar directamente en el registro 7 (teniendo un puntero guardado) para seguir leyendo secuencial a partir del registro 8. Se que se puede hacer en archivos indexados, BD pero como hacerlo en C#. Esto es para no hacer un ciclo (for) de 1 a puntero y leer el archivo (readeline) hasta i++

reg. 1
reg. 2
reg. 3
reg. 4
reg. 5
reg. 6
**reg. 7
reg. 8
reg. 9
reg. 10

Atento a sus comentarios y gracias por una pronta respuesta.

Juan Carlos Valverde I.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Posicionarse directo a una línea de un archivo ASCII por CCHAR

Publicado por sasa (6 intervenciones) el 12/09/2013 02:33:13


Aqui arriba envio una imagen para ayudar a darte una idea de como se organiza de forma simple un archivo binario,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.IO;
class MyStream
{
    private const string FILE_NAME = @"C:\Windows\Microsoft.NET\Framework\v2.0.50727\Nuevacarpeta\pruebas\files\Test.data";
    public static void Main(String[] args)
    {
 
        // Create the new, empty data file.
        if (File.Exists(FILE_NAME))
        {
            Console.WriteLine("{0} already exists!", FILE_NAME);
            return;
        }
        FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew);
        // Create the writer for data.
        BinaryWriter w = new BinaryWriter(fs);
        //Write data to Test.data.
        for (int i = 0; i < 11; i++)
        {
            w.Write((int)i);
        }//for
 
 
        w.Close();
        fs.Close();
 
        fs = new FileStream(FILE_NAME,FileMode.Open,FileAccess.Read);
        fs.Seek(24,SeekOrigin.Begin);
 
/*El truco esta en el metodo Seek, la line a de arriba puede leerse como:
 
1)	Colocar el posicionador en SeekOrigin.Begin
2)	La ubicación del posicionador va a ser 24 posiciones a partir de SeekOrigin.Begin

*/
 
 
        BinaryReader r = new BinaryReader(fs);
        Console.WriteLine(r.ReadInt32());  //mostrara 6
 
        r.Close();
        fs.Close();
    }//Main
}//MyStream
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Posicionarse directo a una línea de un archivo ASCII por CCHAR

Publicado por sasa (6 intervenciones) el 12/09/2013 02:42:02
Añado una imagen para mostrar como se organiza el archivo de texto.




A partir de la imagen y en el siguiente codigo encontrarás la respuesta.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.IO;
 
public class FSSeek
{
    public static void Main()
    {
        long offset;
        int nextByte;
 
        // alphabet.txt contains "abcdefghijklmnopqrstuvwxyz" 
        using (FileStream fs = new FileStream(@"c:\temp\alphabet.txt", FileMode.Open, FileAccess.Read))
        {
            for (offset = 1; offset <= fs.Length; offset++)
            {
                fs.Seek(-offset, SeekOrigin.End);
                Console.Write(Convert.ToChar(fs.ReadByte()));
            }
            Console.WriteLine();
 
            fs.Seek(20, SeekOrigin.Begin);
/*
Nuevamente el truco es el metodo Seek.
La linea de arriba se lee como:
:
1)	Coloca el posicionador en SeekOrigin.Begin
2)	La ubicación del posicionador va a ser 20 posiciones a partir de SeekOrigin.Begin.
*/
 
 
 
            while ((nextByte = fs.ReadByte()) > 0)
            {
                Console.Write(Convert.ToChar(nextByte));
            }
            Console.WriteLine();
        }
    }
}
// This code example displays the following output: 
// 
// zyxwvutsrqponmlkjihgfedcba 
// uvwxyz
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar