Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2017, 09:53   #1
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
Вопрос Массив из файла

Как сделать из txt файла структура которого

1; 2010.08.08; 4000
2; 2017.09.12; 3000
и т.д. ( количество строк неизвестно)

Массив в котором каждый элемент массива это строка, при этом необходимо сделать на случай падения системы при сохранении записи в массив, чтоб при обработке последующей была точка отсчета. В дальнейшем предполагается использовать каждый элемент строки для передачи, предполагается двумерный массив я так понимаю.
Asew вне форума Ответить с цитированием
Старый 29.08.2017, 10:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

вообще ничего не понятно.
и почему массив двухмерный?

если нужно файл построчно прочитать, то достаточно:

Код:
            //Читаем текст в файле построчно
            string[] readText = File.ReadAllLines(@"C:\temp\VashFile.txt");
а если нужно разбить строки на элементы, то это можно сделать через метод Split(';')
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.08.2017, 12:58   #3
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вообще ничего не понятно.
и почему массив двухмерный?

если нужно файл построчно прочитать, то достаточно:

Код:
            //Читаем текст в файле построчно
            string[] readText = File.ReadAllLines(@"C:\temp\VashFile.txt");
а если нужно разбить строки на элементы, то это можно сделать через метод Split(';')
1. Необходимо перевести текстовую строки в массив
2. Поскольку каждый элемент массива будет передаваться в стороннюю программу необходимо это учесть создав точку отката при передаче, чтоб не было повторного запуска с нуля
3. Двумерный потому что мы записываем строку в массив как элемент, как потом выбрать конкретный элемент строки ?

Последний раз редактировалось Asew; 29.08.2017 в 13:01.
Asew вне форума Ответить с цитированием
Старый 29.08.2017, 13:35   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Asew Посмотреть сообщение
1. Необходимо перевести текстовую строки в массив
это делается тем кодом, который я предложил.


Цитата:
Сообщение от Asew Посмотреть сообщение
Поскольку каждый элемент массива будет передаваться в стороннюю программу необходимо это учесть создав точку отката при передаче, чтоб не было повторного запуска с нуля
"точка отката" - это некая позиция в массиве. Запоминать эту позицию должен тот метод, который передаёт данные (и принимает подтверждения), массив тут не при чём.

Цитата:
Сообщение от Asew Посмотреть сообщение
3. Двумерный потому что мы записываем строку в массив как элемент, как потом выбрать конкретный элемент строки ?
i-я строка это readText[i]
если нужно разбить строку на элементы, то это делается через метод Split
например,
Код:
 string[] one = readText[i].Split(';');

 Console.WriteLine('N = {0} Date = {1} Value = {2}', one[0], one[1], one[2] );
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.08.2017, 13:51   #5
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вообще ничего не понятно.
и почему массив двухмерный?

если нужно файл построчно прочитать, то достаточно:

Код:
            //Читаем текст в файле построчно
            string[] readText = File.ReadAllLines(@"C:\temp\VashFile.txt");
а если нужно разбить строки на элементы, то это можно сделать через метод Split(';')
Спасибо большое. А если написать вот так

Код:
StreamReader f = New StreamReader("test.txt");
string s = f.ReadToEnd();
List(Of String) text = New List(Of String);
foreach (string tmp in s) {
	text.Add(tmp);
}
то как допилить его чтоб на элементы разбить? Так?
Код:
string[] one = text[i].Split(';');

 Console.WriteLine('N = {0} Date = {1} Value = {2}', one[0], one[1], one[2] );

Последний раз редактировалось Asew; 29.08.2017 в 14:06.
Asew вне форума Ответить с цитированием
Старый 29.08.2017, 14:38   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Asew Посмотреть сообщение
то как допилить его чтоб на элементы разбить?
Вы уверены, что у Вас язык программирования C# ?

код, который Вы написали - не является корректным кодом на C#

кроме этого, обоснуйте, пожалуйста, чем Вам метод ReadToEnd подходит больше, чем ReadAllLines ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.08.2017, 14:51   #7
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы уверены, что у Вас язык программирования C# ?

код, который Вы написали - не является корректным кодом на C#

кроме этого, обоснуйте, пожалуйста, чем Вам метод ReadToEnd подходит больше, чем ReadAllLines ?
я предложил как вариант ..возможно я не прав , иначе бы я не спрашивал здесь.

Последний раз редактировалось Asew; 29.08.2017 в 14:54.
Asew вне форума Ответить с цитированием
Старый 29.08.2017, 14:54   #8
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
По умолчанию

В чем по большому счету разница между Вашим вариантом
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
string[] readText = File.ReadAllLines(@"C:\temp\VashFil e.txt");
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
string[] one = readText[i].Split(';');

Console.WriteLine('N = {0} Date = {1} Value = {2}', one[0], one[1], one[2] );
и

моим


Цитата:
Сообщение от Asew Посмотреть сообщение
StreamReader f = New StreamReader("test.txt");
string s = f.ReadToEnd();
List(Of String) text = New List(Of String);
foreach (string tmp in s) {
text.Add(tmp);
Цитата:
Сообщение от Asew Посмотреть сообщение
string[] one = text[i].Split(';');

Console.WriteLine('N = {0} Date = {1} Value = {2}', one[0], one[1], one[2] );
Если я в чем-то не прав поправьте меня пожалуйста.
Asew вне форума Ответить с цитированием
Старый 29.08.2017, 14:56   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Asew Посмотреть сообщение
возможно я не прав
код, который Вы написали - не корректен с точки зрения C#


Цитата:
Сообщение от Asew Посмотреть сообщение
я предложил как вариант
ну, можно и так.
только непонятно, зачем - сначала мы получаем массив всех строк (массив в памяти), потом построчно этот массив записываем в список (коллекцию).
а зачем? чем массив не устраивает? зачем список?

впрочем, хотите список - извольте:

Код:
using System;
using System.IO;
using System.Collections.Generic;

namespace SplitTextFile
{
	class Program
	{
		public static void Main(string[] args)
		{
			
			List<string> lists = new List<string>();
			foreach (string tmp in File.ReadAllLines("test.txt")) {
			         	lists.Add(tmp);
			         }

			foreach (string s in lists)
			{
				string[] one = s.Split(';');
 				Console.WriteLine("N = {0} Date = {1} Value = {2}", one[0], one[1], one[2] );
			}

			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.08.2017, 18:22   #10
Asew
Пользователь
 
Регистрация: 29.08.2017
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
код, который Вы написали - не корректен с точки зрения C#



ну, можно и так.
только непонятно, зачем - сначала мы получаем массив всех строк (массив в памяти), потом построчно этот массив записываем в список (коллекцию).
а зачем? чем массив не устраивает? зачем список?

впрочем, хотите список - извольте:

Код:
using System;
using System.IO;
using System.Collections.Generic;

namespace SplitTextFile
{
	class Program
	{
		public static void Main(string[] args)
		{
			
			List<string> lists = new List<string>();
			foreach (string tmp in File.ReadAllLines("test.txt")) {
			         	lists.Add(tmp);
			         }

			foreach (string s in lists)
			{
				string[] one = s.Split(';');
 				Console.WriteLine("N = {0} Date = {1} Value = {2}", one[0], one[1], one[2] );
			}

			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
}
Спасибо огромное, помогло! Как можно доработать данное решение под считывание с определенной строки и до последней строки (при этом количество строк неизвестно)? Возможно ли выставить флаг на строку для которой создавался массив для случая случайной перезагрузки системы , как вариант создание промежуточного текстового файла с остаточным количеством строк до перезагрузки системы?
Asew вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из файла в массив IGOR199304 PHP 4 26.07.2013 23:44
массив из файла Арианна Помощь студентам 12 22.05.2012 22:54
Массив из файла sixS Паскаль, Turbo Pascal, PascalABC.NET 1 21.10.2011 22:33
Массив из файла veleg PHP 1 16.10.2011 12:29
из файла в массив Arcueid1691 Общие вопросы C/C++ 4 01.06.2009 01:00