C# как читать данные из текстового файла
Я написал программу для решения систем линейных уравнений
и я хочу прочитать данные из текстового файла в формате
число уравнений
коэффициенты строки № 1, включающие элемент вектора независимых членов
разделенные пространством
коэффициенты строки № 2, включающие элемент вектора независимых членов
разделенные пространством
но я уже нашел как читать файл строка за строкой в строку
using System; using System.IO; using System.Globalization; namespace LUdecomposition { class LUdecomposition { public const double ZERO = 1.0e-15; public static void Main() { char esc; string str,path; int i,j,n; double[,] A; double[] b; int[] p; double d; NumberFormatInfo nfi = new NumberFormatInfo(); nfi.NumberDecimalSeparator = "."; Console.WriteLine("Podaj ścieżkę do pliku w którym chcesz zapisać wynik"); path = Console.ReadLine(); using(StreamWriter sw = new StreamWriter(path,true)) { do { try { Console.Clear(); Console.WriteLine("Rozwiązywanie układów równań liniowych metodą rozkładu macierzy LU = PA"); Console.WriteLine(); Console.WriteLine("Podaj liczbę równań n="); str = Console.ReadLine(); int.TryParse(str,out n); A = new double[n,n]; b = new double[n]; p = new int[n]; for(i = 0;i < n;i++) { Console.WriteLine("Wprowadz " + (i+1).ToString(nfi) + ". wiersz macierzy"); for(j = 0;j < n;j++) { str = Console.ReadLine(); double.TryParse(str,out A[i,j]); } Console.WriteLine("Wprowadz " + (i+1).ToString(nfi) + ". wyraz wolny"); str = Console.ReadLine(); double.TryParse(str,out b[i]); } FactorLU(n,A,p,out d); sw.WriteLine(d.ToString(nfi)); for(i = 0;i < n && Math.Abs(d) > ZERO ;i++) { for(j = 0;j < n; j++) { Console.Write(A[i,j].ToString(nfi)+" , "); sw.Write(A[i,j].ToString(nfi) + " , "); } Console.WriteLine(); sw.WriteLine(); } if(Math.Abs(d) > ZERO) { SolveLU(n,A,p,b); for(i = 0;i < n && Math.Abs(d) > ZERO ;i++) { Console.WriteLine(b[i].ToString(nfi)); sw.WriteLine(b[i].ToString(nfi)); } Console.WriteLine(); sw.WriteLine(); } } catch(System.IndexOutOfRangeException e) { } esc = (char)Console.ReadKey().Key; } while(esc != (char)ConsoleKey.Escape); } } public static void FactorLU(int n,double[,] A,int[] p,out double d) { int k,i,j,l; double pmax,tmp; d = 1.0; for(k = 0;k < n ;k++) { pmax = Math.Abs(A[k,k]); l = k; for(j = k + 1;j < n; j++) { if(Math.Abs(A[j,k]) > pmax) { pmax = Math.Abs(A[j,k]); l = j; } } if(l != k) { for(j = 0;j < n; j++) { tmp = A[k,j]; A[k,j] = A[l,j]; A[l,j] = tmp; } d = -d; } d *= A[k,k]; if(pmax <= ZERO) return ; p[k] = l; for(i = k + 1; i < n; i++) { A[i,k]/=A[k,k]; for(j = k + 1;j < n; j++) A[i,j] -= A[i,k]*A[k,j]; } } } public static void SolveLU(int n,double[,] LU,int[] p,double[] b) { int i,k; double tmp; for(k = 0;k < n - 1; k++) { tmp = b[k]; b[k] = b[p[k]]; b[p[k]] = tmp; } for(k = 1;k < n; k++) for(i = 0; i < k; i++) b[k] -= b[i]*LU[k,i]; for(k = n - 1; k >= 0; k--) { for(i = k + 1;i < n; i++) b[k] -= LU[k,i]*b[i]; b[k] /= LU[k,k]; } } } }
Что я уже пробовал:
Я нашел как читать файл строка за строкой в строку
using System; using System.IO; namespace FileApplication { class Program { static void Main(string[] args) { try{ // Create an instance of StreamReader to read from a file. // The using statement also closes the StreamReader. string path; Console.ReadLine(path); using(StreamReader sr =newStreamReader(path)) { string line; // Read and display lines from the file until // the end of the file is reached. while((line = sr.ReadLine())!=null) { Console.WriteLine(line); } } }catch(Exception e) { // Let the user know what went wrong. Console.WriteLine("The file could not be read:"); Console.WriteLine(e.Message); } Console.ReadKey(); } } }
Я не хочу использовать функцию Split для анализа данных из строки
потому что ему нужно создать дополнительный строковый массив
Может быть, Trim,IndexOf, Substring будет достаточно
но как их использовать