int x = Convert.ToInt32(reader.ReadLine());
string y = reader.ReadLine();
convert string to float
Необходимо из файла считать исходные данные.
Читаю файл используя StreamReader и ReadLine.
Файл текстовый все значения записаны в столбик (самый простой вариант).
Когда нужно считать int или string проблем не возникает:
Код:
но как только понадобилось прочитать float - все встал в ступор!
Единственный вариант который нашел это заменить float на double
и попробовать использовать сле-ю конструкцию
Код:
double z = Convert.ToDouble(reader.ReadLine());
Но вариант не прокатил с ошибкой на то что не пральный формат строки на входе???? числа в файле представлены в формате 0.000000. Подскажите как быть, и double не очень хотелось бы использовать, float мне подходит больше;
Второй вопрос возник такой
в первом случае у меня данные в файле хранились столбиком:
123
23
строка
0.23423
И в зависимости от структуры исходных данных просто по разному их читал.
Но если они записаны в строку?
К примеру строки интов:
123 323 456 879
В с++ достаточно было использовать fscanf, а в C# я так понял ни чего подобного нет? Пожалуйста помогите!
1) стоят лишние пробелы - 12.123 или есть пробелы до и после числа
2) формат знака разделителя - точка или запятая: 12.123 или 12,123
3) другие ошибки я не рассматриваю
для пункта 1 достаточно исклюяить пробелы из строки
для пункта 2 делаем замену точки на запятую
итак получаем
Код:
Stream myStream = null;
StreamReader reader = null;
.
.
.
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
reader = new StreamReader(myStream);
.
.
.
doble x;
x = Convert.ToDouble(reader.ReadLine().Trim().Replace(".", ","));
}
}
StreamReader reader = null;
.
.
.
if ((myStream = openFileDialog1.OpenFile()) != null)
{
using (myStream)
{
reader = new StreamReader(myStream);
.
.
.
doble x;
x = Convert.ToDouble(reader.ReadLine().Trim().Replace(".", ","));
}
}
При этом такой метод поддерживает также чтение чисел в формате +/-xxx,yyye+/-zzz например -1,123e-4!!
Если кто знает Пожалуйста помогете решит второй вопрос если в строке записано несколько чисел,
как их из этой строки считать в массив В си++ аналог fscanf!!!!
string s = "123 23 432";
foreach (string f in s.Split(' '))
{
Console.WriteLine(f);
}
на выходе даст:
123
23
432
А на будущее советую присмотреться к методам разных типов! Там очень много полезного.
Цитата: PhantomX
Итак, частично я ответил на свой вопрос сам, если в строке только одно число формата Double или Float, то при его чтении из файла возможны следующие ошибки:
1) стоят лишние пробелы - 12.123 или есть пробелы до и после числа
2) формат знака разделителя - точка или запятая: 12.123 или 12,123
3) другие ошибки я не рассматриваю
1) стоят лишние пробелы - 12.123 или есть пробелы до и после числа
2) формат знака разделителя - точка или запятая: 12.123 или 12,123
3) другие ошибки я не рассматриваю
Все гораздо проще, чем вам кажется.
Код:
// получаем формат числа для текущей культуры
NumberFormatInfo numInfo = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone();
// выставляем десятичный разделитель
numInfo.NumberDecimalSeparator = ",";
string number_str = Console.ReadLine().Trim();
// переводим из строки во float (System.Single)
float number = float.Parse(number_str, NumberStyles.Float, numInfo);
NumberFormatInfo numInfo = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone();
// выставляем десятичный разделитель
numInfo.NumberDecimalSeparator = ",";
string number_str = Console.ReadLine().Trim();
// переводим из строки во float (System.Single)
float number = float.Parse(number_str, NumberStyles.Float, numInfo);
Кстати, не забываем добавить в список импорта System.Globalization.
По поводу многих символов - уже упоминалось использование метода Split у класса System.String.