Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 22.08.2015
Сообщений: 125
1

Чтение из файла построчно переменных разного типа

23.02.2017, 15:17. Показов 2765. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть файл исходных данных input.txt. там содержатся данные о сети (точки начала и конца ветвей, марки провода и т.п.)
есть файл "каталог" с марками провода
Как проще всего и правльно читать эти данные из файлов ?
Пробовал примерно следующим образом
Pascal
1
2
3
4
5
6
7
8
9
Assign(FT,'put/input.txt');
 Reset(FT);
 Readln(FT,WStr);
 Readln(FT,WStr);
 Val(Copy(WStr,49,4),N_Line,v);
 Readln(FT,WStr);
 for i:=1 to N_Line do 
 begin
  Readln(FT,N1[i],N2[i],Name_Line[i],LengLine[i]);
1. Можно ли как то проще прочитать значение числа линий ? Val(Copy(WStr,49,4),N_Line,v); выглядит косным решением
2. Какой разделитель должен быть между переменными в файле который читается с помощью Readln ? Каким образом читается string ? сейчас захватываются лишние пробелы (до и после значения марки провода Name_Line[i])
Вложения
Тип файла: txt Line.txt (2.7 Кб, 4 просмотров)
Тип файла: txt input.txt (955 байт, 7 просмотров)
Тип файла: rar программа.rar (5.0 Кб, 2 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2017, 15:17
Ответы с готовыми решениями:

Присвоение переменных разного типа
Использую я значит вот такую строку, пытаясь получить возвращаемые данные char и ulong. ULONG...

Сравнение переменных разного типа
Не задача, просто любопытно, почему именно так? static void Main(string args) { int i =...

Ввод и вывод переменных разного типа
Вот что у меня получилось: Program blabla; var lambda,pi,fi:real; y:integer; f,x:char; begin...

Определения знака переменных разного типа
Используя перегрузку функций, написать программу определения знака переменных разного типа.

5
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
23.02.2017, 17:09 2
Лично я проблему с пробелами решал всегда так: записалась переменная с пробелами в начале и в конце - через delete() тру первый и последний символы - профит
0
3 / 3 / 0
Регистрация: 22.08.2015
Сообщений: 125
23.02.2017, 22:58  [ТС] 3
Цитата Сообщение от Hitoku Посмотреть сообщение
Лично я проблему с пробелами решал всегда так: записалась переменная с пробелами в начале и в конце - через delete() тру первый и последний символы - профит
а как удалить вообще все пробелы в переменной типа String ?
И как все таки сделать по уму ? табуляцию ставить между значениями в исходных данных ?
0
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
23.02.2017, 23:48 4
Удалить все пробелы можно путём посимвольной проверки. Как только встречается пробел - удаляешь символ с заданной позиции. Остальные символы сместятся влево, поэтому надо продолжать проверку с предшествующей позиции

Добавлено через 2 минуты
Файл у тебя больно сложно выглядит, тут заморачиваться придётся. В принципе структура файла у тебя есть и ты можешь начинать считывание с конкретной позиции строки, проскакивая все пробелы

Добавлено через 5 минут
Вообще я бы сделал максимально упрощённый файл, а в программе сделал бы пункт вроде "Отображение данных". Там уже, распределив данные из файла по нужным массивам, можно выдать нормальные "таблицы" и всю работу с файлом организовать через программу. Так и вывод в новый файл делать куда проще, т.к. структура будет очень простая и с последующей загрузкой данных не возникнет косяков

Файл например организовать не так:
Кликните здесь для просмотра всего текста
Чтение из файла построчно переменных разного типа

а вот так:
Кликните здесь для просмотра всего текста
АС-25_1.176_0.377_0.02_2.8_130.
АС-35_0.74_0.434_0._2.8_210.
АС-50_0.63_0.374_0._2.8_210.
А-70_0.45_0.315_0._2.8_265.
АС-70_0.45_0.364_0._2.8_265.
ААШв-35_0.894_0.095_49.1_71._115.
СБ-35_0.53_0.095_49.1_71._150.
0
3 / 3 / 0
Регистрация: 22.08.2015
Сообщений: 125
24.02.2017, 01:12  [ТС] 5
Цитата Сообщение от Hitoku Посмотреть сообщение
В принципе структура файла у тебя есть и ты можешь начинать считывание с конкретной позиции строки, проскакивая все пробелы
как это сделать правильно ?
и что в файле замудреного - пробелы между значениями, в принципе можно изменить на табуляции, но решит ли это проблему ? Какой разделитель Readln понимает ?
0
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
24.02.2017, 02:17 6
Цитата Сообщение от diplom-electro Посмотреть сообщение
как это сделать правильно ?
Я пишу всю строку в отдельный массив, а потом уже из него с помощью Copy переношу в другие массивы нужные мне элементы. Правильно и неправильно - это понятия субъективные. Как придумаешь - так и будет работать

Цитата Сообщение от diplom-electro Посмотреть сообщение
и что в файле замудреного - пробелы между значениями
Дело не в пробелах, а в заголовках типа
Чтение из файла построчно переменных разного типа

Это в принципе, как мне кажется, никак не будет участвовать в вычислениях, поэтому, дабы упростить себе жизнь, можно втыкать всё это уже в программе тем же writeln. Ну тут уже чисто моё представление. Вот какое упрощение в основном я имею в виду

Вот, сделал примерно, как я это вижу:
Pascal
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
26
27
28
29
30
31
32
33
var
MAIN: array [1..100] of string;
NN: array [1..100] of integer;
NK: array [1..100] of integer;
TYPELINE: array [1..100] of string;
LENGTH: array [1..100] of real;
i,j:integer;
f:text;
begin
  i:=0;
  assign(f,'E:\input.txt');
  reset(f);
    while not eof(f) do
      begin
        inc(i);
        readln(f,MAIN[i]);
      end;
  close(f);
  j:=i;
  writeln('Количество линий ',j);
  writeln('NN  NK  Тип линий  Длина');
  for i:=1 to j do
    begin
      NN[i]:=StrToInt(copy(MAIN[i],1,2));
      delete(MAIN[i],1,3);
      NK[i]:=StrToInt(copy(MAIN[i],1,2));
      delete(MAIN[i],1,3);
      TYPELINE[i]:=copy(MAIN[i],1,5);
      delete(MAIN[i],1,6);
      LENGTH[i]:=StrToFloat(MAIN[i]);
      writeln(NN[i]:2,'',NK[i]:4,'',TYPELINE[i]:9,'',LENGTH[i]:9);
    end;
end.
Вот так выглядит исходный файл
Кликните здесь для просмотра всего текста
Название: f0e0b335bff4476d95f3ff928ecb94e7.png
Просмотров: 39

Размер: 5.5 Кб

Вот так выглядит это при запуске программы
Кликните здесь для просмотра всего текста
Название: 0b0908b6a69e4137986dc91fad87e334.png
Просмотров: 38

Размер: 5.2 Кб
Вложения
Тип файла: txt input.txt (225 байт, 2 просмотров)
0
24.02.2017, 02:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2017, 02:17
Помогаю со студенческими работами здесь

Создание массива массивов разного типа переменных
Здравствуйте! Я новичок в скриптинге (C#), по этому возможно спрошу глупость, так как гугл не дал...

Вывод переменных разного типа через TextOut()
Приветствую. Начал изучать WinAPI и столкнулся с такой проблемой. Хочу вывести в окошко результат...

Возвращение в одном методе переменных разного типа
Доброго времени суток! Можно ли каким-либо образом вернуть из одного метода значения переменных с...

Вычисление произведения двух переменных разного типа
Используя перегрузки функций, написать программу вычисления произведения двух переменных разного...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru