Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/23: Рейтинг темы: голосов - 23, средняя оценка - 4.78
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182

Обработка информации текстового файла

24.03.2012, 17:14. Показов 4762. Ответов 39
Метки нет (Все метки)

Имеется текстовый файл, содержащий следующее (тут только три первые строчки, так их там очень много):
-966.0 664.0 0.0001 0.0 0.0 1.0 0.993 -976.0 664.0 0.0001 0.0 0.0 1.0 0.987 -966.0 674.0 0.0001 0.0 0.0 1.0 1.0 -976.0 674.0 0.0001 0.0 0.0 1.0 0.995 5 1.0
-504.0 -8.0 0.0 0.0 0.0 0.0 0.0 -504.0 -8.0 0.0 0.0 0.0 0.0 0.0 -504.0 -8.0 0.0 0.0 0.0 0.0 0.0 -504.0 -8.0 0.0 0.0 0.0 0.0 0.0 5 0.0
32.0 126.0 14.4375 0.0 0.0 0.0 0.0 48.0 126.0 14.4375 0.0 0.0 0.0 0.0 32.0 110.0 14.4375 0.0 0.0 0.0 0.0 48.0 110.0 14.4375 0.0 0.0 0.0 0.0 13 0.0
...
Каждая строчка состоит из четырех "элементов" (первый и трейтий я выделил жирным, второй и четверты курсивом, последние две цифры в каждой строке(подчеркнутые) меня не интересуют).

Каждый "элемент" имеет по семь цифр (десятичная дробь).

Меня интересуют только первые три цифры в каждом "элементе" (это координаты x y z, но в прочем не важно), получается 12 цифр в строке
т.е. вот эти :
-966.0 664.0 0.0001 0.0 0.0 1.0 0.993 -976.0 664.0 0.0001 0.0 0.0 1.0 0.987 -966.0 674.0 0.0001 0.0 0.0 1.0 1.0 -976.0 674.0 0.0001 0.0 0.0 1.0 0.995 5 1.0
мне нужно получить эти 12 цифр из строки для дальнейшего манипулирования ими (каждую цифру по отдельности из каждой строки), получается в каждой строке 12 переменных
x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4
(и таким же образом для всех строк файла)
допустим я захочу просто их сохранить в текстовый файл, получается первая строчка будет выглядеть так:

-966.0 664.0 0.0001 -976.0 664.0 0.0001 -966.0 674.0 0.0001 -976.0 674.0 0.0001
(и таким же образом для всех строк файла)

я только начинаю программировать, так что пока не очень силен в этом, но подразумеваю, что тут надо использовать массив(двумерный)
помогите пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.03.2012, 17:14
Ответы с готовыми решениями:

Обработка информации из текстового файла
Дан файл формата Р1, Р2, …, Р10 – объемы поставок; x1, x2, …, x20 – объемы потреблений; S1, S2, …, S10 – список поставщиков; ...

Обработка строк символов по информации из текстового файла
Помогите пожалуйста исправить задачку, нужно чтобы выводило на экран большое количество чисел, и при нахождении цифры которая находится на...

Обработка строк символов по информации из текстового файла. Вывести текст словами
Задано некоторое натуральное число k. Требуется вывести весь текст словами (например, при k=5 вывод имеет вид «пять», при k=123 нужно...

39
 Аватар для gitarillo
755 / 554 / 48
Регистрация: 17.06.2010
Сообщений: 1,041
Записей в блоге: 1
26.03.2012, 09:21
Пробел не самый удобный разделитель. Лучше использовать '|' или { какой-гибудь.
В Single
VB.NET
1
CSng(значение)
0
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182
26.03.2012, 09:57  [ТС]
Цитата Сообщение от gitarillo Посмотреть сообщение
Пробел не самый удобный разделитель. Лучше использовать '|' или { какой-гибудь.
В Single
VB.NET
1
CSng(значение)
Разделитель заменил на палочку, действительно так удобней спасибо, а вот насчет CSng проблема:
Миниатюры
Обработка информации текстового файла  
0
 Аватар для gitarillo
755 / 554 / 48
Регистрация: 17.06.2010
Сообщений: 1,041
Записей в блоге: 1
26.03.2012, 10:42
весь массив нельзя привести к типу. Это нужно делать поэлементно.
Вот пример:
VB.NET
1
2
3
4
5
6
7
8
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim str As String = "1|2,25|-3,978"
        Dim a() As String = Split(str, "|")
        Dim b(a.Length - 1) As Single
        For i As Integer = 0 To a.Length - 1
            b(i) = CSng(a(i))
        Next
    End Sub
0
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182
26.03.2012, 14:52  [ТС]
Приведение строки "-966.0" к типу "Single" является недопустимым.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Public Class Form1
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim water_dat As New System.IO.StreamReader("water.dat")
        Dim water As String = water_dat.ReadLine
 
        Debug.WriteLine(water)
 
        Dim waterarray() As String = water.Split("|")
 
        Dim waterarraySng(waterarray.Length - 1) As Single
 
        For i As Integer = 0 To waterarray.Length - 1
            waterarraySng(i) = CSng(waterarray(i))
        Next
 
        Debug.WriteLine(waterarray(29))
 
        Dim x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4 As Single
 
        Debug.WriteLine(x1)
 
 
    End Sub
End Class
неполучается
0
 Аватар для gitarillo
755 / 554 / 48
Регистрация: 17.06.2010
Сообщений: 1,041
Записей в блоге: 1
26.03.2012, 14:55
Castello2401, разделитель целой и дробной части должен быть какой? Правильно, запятая.
А у тебя что? Правильно, точка.
А что нужно сделать? Правильно заменить точку на запятую.
Как? Ну конечно функцией Replace.
0
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182
26.03.2012, 15:41  [ТС]
gitarillo, спасибо большое никогда бы не до думался, я в настройках системы выставил точку в качестве делителя дробной части, чтоб не заморачиватся когда надо будет сохранять в файл

Добавлено через 41 минуту
Вот что у меня получилось на данный момент:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim water_dat As New System.IO.StreamReader("water.dat")         'Создаем объект для чтения информации из текстового файла
        Dim water As String = water_dat.ReadLine 'Считываем строку из файла и присваиваем её переменной water 
        Dim waterarray() As String = water.Split("|") 'Создаем и заполняем массив 30 элементами строки разделенными знаском "|"
        Dim x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4 As Single 'Подготавливаем 12 переменных для хранения нужных мне данных из массива
 
        'Заносим нужные мне данные из массива (конвертируя их в Single) в 12 переменных
 
        x1 = CSng(waterarray(0)) : y1 = CSng(waterarray(1)) : z1 = CSng(waterarray(2))
        x2 = CSng(waterarray(7)) : y2 = CSng(waterarray(8)) : z2 = CSng(waterarray(9))
        x3 = CSng(waterarray(14)) : y3 = CSng(waterarray(15)) : z3 = CSng(waterarray(16))
        x4 = CSng(waterarray(21)) : y4 = CSng(waterarray(22)) : z4 = CSng(waterarray(23))
 
        Dim water2 As New System.IO.StreamWriter("water2.txt") 'Создаем объект для записи информации в текстовый файл water2.txt
 
        water2.WriteLine(x1 & y1 & z1 & x2 & y2 & z2 & x3 & y3 & z3 & x4 & y4 & z4) ' Пишем
        water2.Close() 'Закрываем файл
Из строки
-966.0|664.0|0.0001|0.0|0.0|1.0|0.993|-976.0|664.0|0.0001|0.0|0.0|1.0|0.987|-966.0|674.0|0.0001|0.0|0.0|1.0|1.0|-976.0|674.0|0.0001|0.0|0.0|1.0|0.995|5|1 .0
Получилось
-9666640.0001-9766640.0001-9666740.0001-9766740.0001
Сразу вопрос, как вставить пробелы в выходную строку?
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
26.03.2012, 16:17
Цитата Сообщение от Castello2401 Посмотреть сообщение
water2.WriteLine(x1 & y1
VB.NET
1
water2.WriteLine(x1 & " " & y1 & " " &.........





А вообще есть функция Join, но она для массива, а у тебя 12 переменных.
1
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182
26.03.2012, 16:26  [ТС]
точно

оказывается у меня в тексте встречаются цифры записанные в виде экспоненты

-7.62939e-006
как зделать чтобы они записывались в Single (округленно), т.е. обычной десятичной дробью с семью знаками после запятой
0
 Аватар для gitarillo
755 / 554 / 48
Регистрация: 17.06.2010
Сообщений: 1,041
Записей в блоге: 1
26.03.2012, 16:29
из этой темы уже по-моему можно 3 сделать.
Функция
VB.NET
1
Format(выражение, "0.00000")
0
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182
26.03.2012, 16:39  [ТС]
gitarillo, из
-7.62939e-006
получилось
-1E-05
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
26.03.2012, 16:48
Цитата Сообщение от gitarillo Посмотреть сообщение
Format(выражение, "0.00000")
VB.NET
1
Round(выражение,7)
???
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
26.03.2012, 16:55
Юпатов Дмитрий, он уже все сделал, осталось правильно отобразить что то типа FormatNumber(х1,7)
0
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328
26.03.2012, 17:02
Попробуй вместо String Objekt
0
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182
26.03.2012, 17:05  [ТС]
Юпатов Дмитрий, получится трех мерный массив, я об этом думал, но пока решил не заморачиваться, потом ради интереса зделаю.
Сейчас осталось правильно отформатировать числа и зациклить это все для обработки всех строк
0
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182
26.03.2012, 22:30  [ТС]
Цитата Сообщение от SergKr Посмотреть сообщение
Попробуй вместо String Objekt
Можете пожалуйста на примере моего кода показать

Добавлено через 42 минуты
Так ладно, форматирование пока не нужно, просто скажите как мне теперь зделать чтобы это все выполнялось для каждой строки и так до конца файла.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim water_dat As New System.IO.StreamReader("water.dat")         'Создаем объект для чтения информации из текстового файла
        Dim water As String = water_dat.ReadLine 'Считываем строку из файла и присваиваем её переменной water
        water_dat.Close() 'Закрываем файл
        Dim waterarray() As String = water.Split("|") 'Создаем и заполняем массив 30 элементами строки разделенными знаском "|"
        Dim x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4 As Single 'Подготавливаем 12 переменных для хранения нужных мне данных из массива
 
        'Заносим нужные мне данные из массива (конвертируя их в Single) в 12 переменных
 
        x1 = CSng(waterarray(0)) : y1 = CSng(waterarray(1)) : z1 = CSng(waterarray(2))
        x2 = CSng(waterarray(7)) : y2 = CSng(waterarray(8)) : z2 = CSng(waterarray(9))
        x3 = CSng(waterarray(14)) : y3 = CSng(waterarray(15)) : z3 = CSng(waterarray(16))
        x4 = CSng(waterarray(21)) : y4 = CSng(waterarray(22)) : z4 = CSng(waterarray(23))
 
        Dim water2 As New System.IO.StreamWriter("water2.txt") 'Создаем объект для записи информации в текстовый файл water2.txt
 
        water2.WriteLine(x1 & " " & y1 & " " & z1 & " " & x2 & " " & y2 & " " & z2 & " " & x3 & " " & y3 & " " & z3 & " " & x4 & " " & y4 & " " & z4) ' Пишем
        water2.Close() 'Закрываем файл
 
        Debug.WriteLine(y3)
Добавлено через 17 минут
Получается цикл должен выглядеть так:
читаем первую строку
создаем и заносим в массив данные взяты из первой строки
создаем и присваиваем переменным значения взятые из массива, где их обрабатываем
записываем полученые значения переменных в первую строку файла (понятно что уже другого)

читаем ВТОРУЮ строку
создаем и заносим в массив данные взяты из первой строки
создаем и присваиваем переменным значения взятые из массива, где их обрабатываем
записываем полученые значения переменных во ВТОРУЮ строку файла

и так до EOF

Добавлено через 14 минут
Цитата Сообщение от Castello2401 Посмотреть сообщение
читаем ВТОРУЮ строку
создаем и заносим в массив данные взяты из первой строки
из второй т.е.

Добавлено через 4 часа 4 минуты
Подсчитал, что у меня в файле 403 строки, кажись обычным For Next' ом можно обойтись
0
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328
26.03.2012, 23:42
VB.NET
1
2
3
4
5
6
7
8
9
Try
  Dim кодировка As System.Text.Encoding = System.Text.Encoding.GetEncoding(1251)
            Dim Readrer As New IO.StreamReader(LanguageFile, кодировка)
 While Not Readrer.EndOfStream
                lngpr = Readrer.ReadLine
Readrer.Close()
        Catch exc As System.IO.FileNotFoundException
 Catch exc As Exception
 End Try
lngpr - и будет тебе одна строка. Обрабатывай...

Добавлено через 53 секунды
Перед Reader.Close() забыл End While
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.03.2012, 08:17
На VB6 твоя программа, может пригодится зачем-нибудь

Исходные данные в файле Text_Input.txt
Результат в Text_Output.txt
Вложения
Тип файла: rar Считывание из файла и запись в файл1.rar (47.0 Кб, 10 просмотров)
0
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182
27.03.2012, 08:36  [ТС]
SoftIce, Спасибо
Вот как я написал:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim waterdat As New System.IO.StreamReader("water.dat")         'Создаем объект для чтения информации из текстового файла
        Dim watergrp As New System.IO.StreamWriter("water.grp") 'Создаем объект для записи информации в текстовый файл
        Dim i As Integer
 
        For i = 1 To 403
 
            Dim water As String = waterdat.ReadLine 'Считываем строку из файла и присваиваем её переменной water
            Dim waterarray() As String = water.Split("|") 'Создаем и заполняем массив 30 элементами строки разделенными знаском "|"
            Dim x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4 As Single 'Подготавливаем 12 переменных для хранения нужных мне данных из массива
 
            'Заносим нужные мне данные из массива (конвертируя их в Single) в 12 переменных
 
            x1 = CSng(waterarray(0)) : y1 = CSng(waterarray(1)) : z1 = CSng(waterarray(2))
            x2 = CSng(waterarray(7)) : y2 = CSng(waterarray(8)) : z2 = CSng(waterarray(9))
            x3 = CSng(waterarray(14)) : y3 = CSng(waterarray(15)) : z3 = CSng(waterarray(16))
            x4 = CSng(waterarray(21)) : y4 = CSng(waterarray(22)) : z4 = CSng(waterarray(23))
 
            watergrp.WriteLine(x1 & " " & y1 & " " & z1 & " " & x2 & " " & y2 & " " & z2 & " " & x3 & " " & y3 & " " & z3 & " " & x4 & " " & y4 & " " & z4) ' Пишем
 
        Next
        waterdat.Close() 'Закрываем файл
        watergrp.Close() 'Закрываем файл
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.03.2012, 08:41
Цитата Сообщение от Castello2401 Посмотреть сообщение
For i = 1 To 403
Количество строк в файле никогда не меняется?
0
12 / 12 / 5
Регистрация: 06.03.2012
Сообщений: 182
27.03.2012, 08:43  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение
Количество строк в файле никогда не меняется?
Неа

Цитата Сообщение от SoftIce Посмотреть сообщение
И ещё, добавить где-нибудь лишний пробел пробовал?
У меня разделитель "|" (Замена рулит)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.03.2012, 08:43

Обработка строк символов по информации из текстового файла. Вывести в виде фразы «мне k лет»
Задано некоторое натуральное число k. Требуется вывести весь текст словами (например, при k=5 вывод имеет вид «пять», при k=123 нужно...

Загрузка информации из текстового файла
Доброго. Коллеги, есть задача загрузить в базу текстовый файл. В нем фрагменты текста, и разделители - пустая строка. Подскажите,...

Чтение информации из текстового файла
Здравствуйте! Помогите, пожалуйста, решить задачу. В текстовый файл записаны полные названия изображений, находящихся в разных папках. Их...

Использование информации из текстового файла
Задание таково: "Необходимо произвести обработку 15 вещественных чисел: найти среднее арифметическое отрицательных чисел и подсчитать...

Считывание информации из текстового файла
Ребят, как считать текст из блокнота с выводом его на экран?? (если можно с комментариями ) Заранее спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru