Как преобразовать текстовый файл в массив с плавающей запятой (на c #)?

#c# #arrays #type-conversion

#c# #массивы #преобразование типов

Вопрос:

Я прочитал файл в переменную в своем проекте на c # и хочу преобразовать его в массив с плавающей запятой.

Вот пример текстового файла:

 -5.673

10.543

-0.322

10.048
 

Файл содержит число, за которым следует пустая строка и другое число.

Я использовал следующий код для чтения файла в свой проект:

 var numbers = File.ReadAllLines(@"numbers.txt")
 

Как мне преобразовать numbers в массив с плавающей запятой?

Спасибо

Ответ №1:

Вы можете использовать Linq и float.Parse() :

 var floats = numbers.Where(s => s != String.Empty).Select(s => float.Parse(s, CultureInfo.InvariantCulture)).ToArray();
 

Но если у вас неверные данные в файле, вы получите исключение. Чтобы проверить, правильно ли задано значение float , используйте float.TryParse() .

Ответ №2:

Тип переменной var таков String[] , что в этом случае вы можете получить значения из четных позиций массива, а затем преобразовать в float .

Ответ №3:

Ваша программа должна перебирать каждую строку в файле, которые в данный момент хранятся в numbers переменной, которая имеет тип String[] , проверять, является ли значение строки пустым, и если нет, преобразовать его в число с плавающей запятой и добавить его в наш массив чисел с плавающей запятой.

Объединение всего этого будет выглядеть примерно так:

 string[] numbers = File.ReadAllLines(@"numbers.txt");

// Create a list we can add the numbers we're parsing to. 
List<float> parsedNumbers = new List<float>() ;

for (int i = 0; i < numbers.Length; i  ) 
{
    // Check if the current number is an empty line
    if (numbers[i].IsNullOrEmpty()) 
    {
        continue;
    }
    // If not, try to convert the value to a float
    if (float.TryParse(numbers[i], out float parsedValue))
    {
        // If the conversion was successful, add it to the parsed float list 
        parsedNumbers.Add(parsedValue);
    }
} 

// Convert the list to an array
float[] floatArray = new float[parsedNumbers.Length];