User 13914457 Ответов: 1

Как я могу начать чтение и запись данных с определенной строки до конца файла в консольном приложении(.NET framework) через C#?


Привет. Я новичок.

Во-первых, я хотел бы начать чтение с этой строки следующим образом до конца файла:

1                                                      START OF RMS MAP


Кроме того, я хотел бы написать конкретную строку в текстовый файл.

Я не преуспел в первом шаге.

Родительский каталог: ftp://cddis.gsfc.nasa.gov/gnss/products/ionex/2017/

Все файлы начинаются с codg.

У меня есть 365 файлов, начинающихся с codg.

Что я уже пробовал:

Регулярное выражение для этой строки: (s, @"^\s*1\s+начало среднеквадратичной карты\S*$")

using System;
using System.IO;

namespace ReadFromFile
{
    class Program
    {
        private void ReadIt(StreamReader sr, StreamWriter sw)
        { 
            string line = sr.ReadLine();
            int blank, lat; 
            String select = ""; 

            while (line != null) 
            {
                blank = line.Split(' ').Length;
                if (line.Length == 80)  
                {
                    if (line.Substring(69, 3) == "RMS") 
                    if (line.Substring(60, 20) == "EPOCH OF CURRENT MAP") 
                        select = line.Substring(0, 24); 
                }
                if (blank > 6)
                {
                    try
                    {
                        if (line.Split(' ')[blank - 1] == "LAT/LON1/LON2/DLON/H") 
                        {
                            lat = Convert.ToInt32(line.Split(' ')[4].Substring(0, 2)); 
                            if ((lat == 30)) 
                            {
                                line = sr.ReadLine(); 
                                line = sr.ReadLine(); 
                                sw.WriteLine(select + " " + line.Substring(56, line.Length - 57)); 
                            }
                        }
                        line = sr.ReadLine();
                    }
                    catch
                    {
                        line = sr.ReadLine();
                    }
                }

            }
        }
        static void Main(string[] args)
        {
            string[] dir = Directory.GetFiles(@"C:\Users\Suat\Desktop\ionex\2017");
            int i = 0;
            Program P = new Program();
            StreamWriter sw = File.CreateText("C:/Users/Suat/Desktop/result.txt");
            for (i = 0; i < dir.Length; i++)
            {
                Console.Clear();
                Console.WriteLine(i.ToString() + "/" + dir.Length.ToString());
                StreamReader sr = File.OpenText(dir[i]);
                P.ReadIt(sr, sw);
                sr.Close();
            }
            sw.Close();
        }
    }
}

Alexander Dymshyts

Пожалуйста, добавьте какой-нибудь код, который вы уже пробовали

[no name]

Этот код не только получает данные между "НАЧАЛО КАРТЫ RMS" и "КОНЕЦ КАРТЫ RMS", этот код также получает "ПУСК ТЭЦ КАРТЕ" и "КОНЕЦ КАРТЫ TECМне просто нужно записать данные среди "НАЧАЛО КАРТЫ RMS" и "КОНЕЦ КАРТЫ RMS- в текстовый файл.

using System;
using System.IO;

namespace ReadFromFile
{
    class Program
    {
        private void ReadIt(StreamReader sr, StreamWriter sw)
        { 
            string line = sr.ReadLine();
            int blank, lat; 
            String select = ""; 

            while (line != null) 
            {
                blank = line.Split(' ').Length;
                if (line.Length == 80)  
                {
                    if (line.Substring(69, 3) == "RMS") 
                    if (line.Substring(60, 20) == "EPOCH OF CURRENT MAP") 
                        select = line.Substring(0, 24); 
                }
                if (blank > 6)
                {
                    try
                    {
                        if (line.Split(' ')[blank - 1] == "LAT/LON1/LON2/DLON/H") 
                        {
                            lat = Convert.ToInt32(line.Split(' ')[4].Substring(0, 2)); 
                            if ((lat == 30)) 
                            {
                                line = sr.ReadLine(); 
                                line = sr.ReadLine(); 
                                sw.WriteLine(select + " " + line.Substring(56, line.Length - 57)); 
                            }
                        }
                        line = sr.ReadLine();
                    }
                    catch
                    {
                        line = sr.ReadLine();
                    }
                }

            }
        }
        static void Main(string[] args)
        {
            string[] dir = Directory.GetFiles(@"C:\Users\Suat\Desktop\ionex\2017");
            int i = 0;
            Program P = new Program();
            StreamWriter sw = File.CreateText("C:/Users/Suat/Desktop/result.txt");
            for (i = 0; i < dir.Length; i++)
            {
                Console.Clear();
                Console.WriteLine(i.ToString() + "/" + dir.Length.ToString());
                StreamReader sr = File.OpenText(dir[i]);
                P.ReadIt(sr, sw);
                sr.Close();
            }
            sw.Close();
        }
    }
}

1 Ответов

Рейтинг:
2

Richard MacCutchan

- Установите выходной файл в значение null.
- Откройте входной файл.
- Прочтите следующую строчку.
- Если содержимое соответствует строке поиска, то откройте выходной файл.
- Если выходной файл не равен нулю, запишите входную строку в выходной файл.
- Повторяйте до конца ввода.