x-ios Ответов: 2

Vb.net / импорт данных из файла .txt и хранение их в массиве


Привет всем, я новичок в VB.NET и мне нужна ваша помощь в решении моей проблемы. Я думаю, что это не так уж трудно решить, но прямо сейчас я застрял.

Итак, у меня есть файл .txt, назовем его так data.txt . Этот файл имеет массив (22x2) с числами
(например, 0,04 0,2587676).

ТАБЛИЦА ДАННЫХ

Мне нужно загрузить этот файл и сохранить его в массиве, а затем я должен взять его номер за номером и сделать некоторые вычисления с одной формулой, а затем сохранить его в новом массиве.

Спасибо Вам за ваше время

Иосиф

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

Dim strFileName() As String '// String Array.
Dim scalings As String = "" '// temp String for result.
strFileName = IO.File.ReadAllLines("C:\Users\x-ios\Documents\#Projects_IVCV_MOS\P120N22.txt") '// add each line as String Array.


For Each myLine In strFileName '// loop thru Arrays.
    scalings &= myLine & vbNewLine '// add Array and new line.\

Next

[no name]

И проблема/вопрос в том, что...?

x-ios

Массив импортированных данных представляет собой строку.
Когда я пытаюсь сделать его двойным, я вижу только 1-е значение.

Как я могу сделать это как двойной массив и как я должен делать следующие вещи, как я уже говорил ранее .

[no name]

Вам нужно разделить строку, чтобы превратить каждую часть в 2 отдельные строки, а затем использовать Double.Метод tryparse, чтобы преобразовать каждую строку в значение типа double.

x-ios

Файл .txt выглядит так, как я уже говорил.
0.04 0.025465
0.05. 0.32392

Когда я разделил струны и дубль.TryParse я должен присоединиться к 2 строкам?Верно?


Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

[no name]

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

x-ios

Итак, вы предлагаете сделать двойной массив [22x2] с этими присвоенными значениями ? а не загружать ли его из txt-файла?

[no name]

Нисколько. Я предлагаю, чтобы ты подумайте о том, что вы действительно пытаетесь сделать, запишите, что вы пытаетесь сделать в логической пошаговой манере затем вы можете подумать о том, что вы делаете в коде. Я знаю только то, что вы написали здесь, и это не имеет никакого смысла, почему вы думаете, что можете использовать строки для выполнения вычислений. Если вы не загружаете этот текстовый файл, откуда, по вашему мнению, будут поступать данные? Вы просите нас рассказать вам, как сделать ваш проект, но не рассказываете нам всю историю. И вы, вероятно, усложняете то, что действительно должно быть.

Ralf Meier

чтобы дать вам идею :
- откуда взялся ваш файл данных ? вы его создали ?
- что вы хотите сделать с данными ?

x-ios

Пожалуйста, проверьте ссылку, которую я обновил в своем вопросе. Вы можете увидеть txt-файл, как он выглядит.

Эти числа я хочу использовать 1-1 в определенной формуле, например x=a*b, предположим, что a - это каждое число из таблицы, А b=1, а затем сохранить x в виде нового массива.

2 Ответов

Рейтинг:
4

Maciej Los

Обратите внимание, что ReadAllLines[^] возвращает строковый массив, содержащий все строки файла. Все, что вам нужно сделать прямо сейчас, это Расщеплять[^] данные о [ "" ] (пробел). Если есть два столбца чисел, разделенных пробелом, вы можете использовать В LINQ[^] чтобы достичь этого, т. е.:

Dim strFileName = IO.File.ReadAllLines("D:\gVcBp4kv.txt")
Dim cu As Globalization.CultureInfo = Globalization.CultureInfo.CreateSpecificCulture("en-US")
Dim style As Globalization.NumberStyles = Globalization.NumberStyles.Number Or Globalization.NumberStyles.AllowCurrencySymbol
 
Dim arrData = strFileName _
	.Select(Function(x) New With _
		{
			.FirstCol = Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(0), style, cu), _
			.SecondCol = Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(1), style, cu) _
		}) _
	.ToList()

'data are ready to use
For Each row In arrData
	Console.WriteLine("{0}-{1}={2}", row.SecondCol, row.FirstCol, row.SecondCol -row.FirstCol)
Next


Выше код возвращает:
0.4568666-0.05=0.4068666
0.57215975-0.06=0.51215975
0.69595725-0.07=0.62595725
0.809528-0.08=0.729528
...and so on...


Теперь вы можете предоставить расчеты.
Для получения более подробной информации, пожалуйста, смотрите:
Строка.Метод Split (String [], StringSplitOptions) (System)[^]
Двойной.Метод Синтаксического Анализа (String, NumberStyles, IFormatProvider) (System)[^]

Удачи вам!

[РЕДАКТИРОВАТЬ]
x-ios написал (комментарий):
Конечно, мне нужна ваша помощь. Мои данные таковы pastebin.com - gVcBp4kv.txt . 2-й столбец разделен vbtab .Я запускаю это с помощью кода, как вы можете видеть в этом посте Как преобразовать строковый 2-мерный массив, импортированный из файла .txt, в double in VB.NET[^ Но я не могу преобразовать массив smatrix в новый double, потому что позже я хочу, чтобы эти элементы были протестированы функцией ABS 1 на 1.


На основе данных, которые вы разместили на pastebin.com сервис я изменил свой код в соответствии с вашими потребностями.


x-ios

Большое вам спасибо за ваше время.

Я пытаюсь это сделать, но не могу .

Не могли бы вы предоставить мне дополнительную информацию?
Как я могу соединить ваш код со своим или с новым?

Maciej Los

Заменять sLines с strFileName чтобы узнать, что происходит. Удалить [о{}] петли.

x-ios

Я использовал это, и у меня была ошибка "входная строка не в правильном формате"


Dim strFileName() As String ' / / строковый массив.
Дим окалина как String = "" '// временная строка для результата.
strFileName = ИО.Файл.ReadAllLines("C:\Users\x-ios\Documents\#Projects_IVCV_MOS\P120N22.txt")
Тусклый ку как глобализация.CultureInfo = Глобализация.CultureInfo.CreateSpecificCulture ("en-US")
Тусклый стиль как глобализация.NumberStyles = Глобализация.Числовые стили.Число Или Глобализация.Числовые стили.AllowCurrencySymbol

Dim arrData = strFileName _
. Выберите (Function (x) New With _
{
.FirstCol = Двойной.Разбора(х.Сплит(Новое String(){" "}, StringSplitOptions.RemoveEmptyEntries) (0), стиль, cu), _
.SecondCol = Двойной.Разбора(х.Сплит(Новое String(){" "}, StringSplitOptions.RemoveEmptyEntries)(1), стиль, cu) _
}) _
.Список()

Maciej Los

В какой строке происходит ошибка?

x-ios

с линии .Select(Function (x) New with_
до конца })_

x-ios

Еще раз здравствуйте, не могли бы вы рассказать мне, как преобразовать 2-мерный массив из string в double?

Maciej Los

Я понятия не имею о вашей структуре данных. Я использовал такие данные: [0.04 0.2587676] в тестовом случае. Код, предоставленный мной, работает нормально, пока цифры не будут избавлены от пробела. Если вам нужна моя помощь, вы должны предоставить более подробную информацию.

x-ios

Конечно, мне нужна ваша помощь. Мои данные таковы https://pastebin.com/gVcBp4kv .2-й столбец разделен vbtab .Я запускаю это с помощью кода, как вы можете видеть в этом посте https://www.codeproject.com/Answers/1187946/How-do-I-convert-a-string-dimension-array-imported#answer1. Но я не могу преобразовать массив smatrix в новый double, потому что позже я хочу, чтобы эти элементы были протестированы функцией ABS 1 на 1.

Maciej Los

Ответ был обновлен. Удачи вам!
Овации,
Мацей

x-ios

Большое вам спасибо за ваши усилия. Теперь я заметил, что выходной массив не является двойным . Я делаю что-то не так? =/ http://tinypic.com/r/a0f3pl/9

Maciej Los

Я не вижу никакой ошибки или предупреждения. У вас есть удалить тормозную точку. Это останавливает вашу программу на линии, где была установлена точка торможения.

x-ios

Ладно, все работает нормально. Но теперь я попробовал функцию АБС .
и я могу проверить только 1-й пункт на массиве саженцев, как вы можете видеть

http://tinypic.com/r/vou6td/9

Maciej Los

Кажется, вы очень начинающий. Вы объявили массив двухместный spaling(7), но он не был инициирован. Не делайте этого таким образом, потому что размер массива может быть меньше или больше, чем количество элементов в запросе (arrData). Если вы хотите использовать функцию Abs, вы должны добавить ее select заявление:
Dim arrData = strFileName _
.Select(Function(x) New With _
{
.FirstCol = Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(0), style, cu), _
.SecondCol = Math.Abs(Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(1), style, cu)) _
}) _
.ToList()


Примечание: Вы должны принять мое решение как ответ (зеленая кнопка), потому что оно решает вашу проблему. В случае другого вопроса, Вы должны опубликовать его.
Извините, но вы должны начать с основ. Прочтите документацию MSDN или купите (и прочтите) книгу о программировании. Ты не единственный, кому нужно мое внимание...
Овации,
Мацей

Рейтинг:
20

Maciej Los

Хорошая мысль!
Вариант Antoher-использовать Linq ;)

Richard MacCutchan

Да, к сожалению, я до сих пор не изучил LINQ должным образом.

Maciej Los

Как говорят в Польше: всю жизнь человек учится, но умирает глупым ;)

Richard MacCutchan

Чем старше я становлюсь, тем больше не знаю.

Maciej Los

Именно это я и пытался сказать.
Овации,
Мацей

Richard MacCutchan

Несмотря на разные языки и культуру, в конечном счете мы все одинаковы. Что-то, что я обнаружил, где бы я ни путешествовал по миру.