Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
5 / 5 / 1
Регистрация: 07.10.2009
Сообщений: 59

Как преобразовать строковые значения в числовые ?

25.10.2009, 14:38. Показов 3308. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане.
Решаю задачу с файлом записей:
Каждая запись содержит следующую информацию об экспортируемых товарах: наименование, страна-экспортер, срок поставки, количество товара. Вывести сведения обо всех странах, в которые должен быть поставлен товар до указанной даты.

Тип поля "Дата" у меня - строковый. Вводится дата в формате ДД.ММ.ГГГГ

Вопрос: Как преобразовать значения ДД ММ ГГГГ из тсрокового в числовой формат и при этом сохранив знак "." ?

Код своей программы привожу:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
program k_2_2;
uses crt;
label 1,4,5,6,8,9,10,12,20,30,40,18,19;
type
tovar=record
naimenovanie:string[30];
strana_exporter:string[30];
data_postavki:string[10];
kolichestvo_tovara:byte;
end;
var
tov:array[1..100] of tovar;
f:file of tovar;
date,str:string;
k,l,n:integer;
i:byte;
begin
10:clrscr;
textcolor(white);
writeln('   Меню   ');
writeln(' 1:  Создание файла* ');
writeln(' 2:  Чтение файла  ');
writeln(' 3:  Добавление записи в файл  ');
writeln(' 4:  Выборка записей из файла*  ');
writeln(' 5:      Выход     ');
readln(k);
case k of
1:goto 6;
2:goto 20;
3:goto 30;
4:goto 40;
5:goto 12;
end;
 
6:clrscr;
writeln('Введите полный адрес и имя типизированного файла');readln(str); 
{$I-}
assign(f,str);
rewrite(f);
{$I+}
if IoResult<>0 then begin
writeln('Повтори ввод полного пути и имени типизированного файла*');
writeln;
delay(5000);
goto 6;
end
else
{$I-}
8:writeln('Введите количество записей');readln(n);
{$I+}
if (IoResult<>0) or (n<=0) then begin
writeln('Повтори ввод количества записей !!!');
delay(500);
goto 8;
end
else
writeln('Введите наименование товара, Страну - экспортер, срок поставки и количество товара *');
for i:=1 to n do begin
writeln('Введите данные ',i,' - записи);
with tov[i] do begin
write('Введите наименование товара* : '); readln(naimenovanie);
write('Введите страну - экспортер  : '); readln(strana_exporter);
write('Введите дату поставки       : '); readln(data_postavki);
{$I-}
9:write('Введите количество товара   : '); readln(kolichestvo_tovara);
{$i+}
if (IoResult<>0) or (kolichestvo_tovara<=0) or(kolichestvo_tovara>1000) then begin
writeln('Повтори ввод количества товара* !!!');
delay(5000);
goto 9;
end
else
writeln;
writeln('Нажмите Enter');readln;
end;
write(f,tov[i]);
end;
close(f);
goto 10;
 
20:clrscr;
assign(f,str);
reset(f);
while not eof(f) do begin
read(f,tov[i]);
writeln(tov[i].naimenovanie);
writeln(tov[i].strana_exporter);
writeln(tov[i].data_postavki);
writeln(tov[i].kolichestvo_tovara);
end;
close(f);
readln;
goto 10;
 
30:clrscr;
assign(f,str);
reset(f);
n:=filesize(f);
seek(f,n);
n:=n+1;
18:writeln('Введите количество записей');readln(n);
{$I+}
if (IoResult<>0) or (n<=0) then begin
writeln('Повтори ввод количества записей !!!');
delay(5000);
goto 18;
end
else
writeln('Введите наименование товара, Страну - экспортер, срок поставки и количество товара **');
for i:=1 to n do begin
writeln('Введите данные ',i,' - записи);
with tov[i] do begin
write('Введите наименование товара* : '); readln(naimenovanie);
write('Введите страну - экспортер  : '); readln(strana_exporter);
write('Введите дату поставки       : '); readln(data_postavki);
{$I-}
19:write('Введите количество товара   : '); readln(kolichestvo_tovara);
{$i+}
if (IoResult<>0) or (kolichestvo_tovara<=0) or(kolichestvo_tovara>1000) then begin
writeln('Повтори ввод количества товара* !!!');
delay(5000);
goto 19;
end
else
writeln;
writeln('Нажмите Enter');readln;
end;
write(f,tov[i]);
end;
close(f);
goto 10;
 
40:clrscr;
assign(f,str);
reset(f);
writeln('Введите дату:'); readln(date);
while not eof(f) do begin
read(f,tov[i]);
if tov[i].data_postavki<date then
begin
writeln(tov[i].naimenovanie);
writeln(tov[i].strana_exporter);
writeln(tov[i].data_postavki);
writeln(tov[i].kolichestvo_tovara);
end;
end;
close(f);
readln;
goto 10;
 
 
12:end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2009, 14:38
Ответы с готовыми решениями:

Как отсортировать строковые значения, как числовые?
Требуется отсортировать строковые значения (номера домов) как числовые по возрастанию.... причем в номерах домов могут быть как символы,...

Как создавать числовые и строковые массивы
Как создавать числовые и строковые массивы?

Определить функцию SUM-NUMERIC-ELEMENTS, которая складывает все числовые значения в списке, игнорируя не числовые элементы
Доброго времени суток, помогите пожалуйста написать функцию SUM-NUMERIC-ELEMENTS, которая складывает все числовые значения в списке,...

8
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
25.10.2009, 14:51
Цитата Сообщение от Виталий_Сигов Посмотреть сообщение
Вопрос: Как преобразовать значения ДД ММ ГГГГ из тсрокового в числовой формат и при этом сохранив знак "." ?
И что за число такое, в котором ещё и две точки есть? Если даже число вещественное, то хранить часть даты как его дробную часть - это, как минимум, неудобно.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
25.10.2009, 17:32
Зачем точку-то сохранять? Ее вернешь при выводе, типа
Pascal
1
write(d,'.',m,'.',g);
0
5 / 5 / 1
Регистрация: 07.10.2009
Сообщений: 59
25.10.2009, 19:10  [ТС]
Большое спасибо за ответы!
Но, подскажите, пожалуйста, может быть есть какая -то функция, позволяющая преобразовать значения из строкового в числовой формат ? И, если не трудно, можете привести пример ?
0
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
 Аватар для TAVulator
4191 / 1292 / 237
Регистрация: 27.07.2009
Сообщений: 3,962
25.10.2009, 19:28
Цитата Сообщение от Виталий_Сигов Посмотреть сообщение
Но, подскажите, пожалуйста, может быть есть какая -то функция, позволяющая преобразовать значения из строкового в числовой формат ?
есть стандартная ф-ция VAL(S: string, V: integer/real, C: errorcode)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
25.10.2009, 19:47
Но запись типа 12.05.2005 нужно сначала парсить, потом в числа преобразовывать, например
Pascal
1
2
3
4
5
6
7
s:='12.05.2005';
s1:=copy(s,1,2);
val(s1,d,c);
s2:copy(s,4,2);
val(s1,m,c);
s3:copy(s,7,4);
val(s1,g,c);
0
5 / 5 / 1
Регистрация: 07.10.2009
Сообщений: 59
25.10.2009, 19:57  [ТС]
Т.е., допустим, ввожу дату в 1-й записи 15.11.2009, а во второй 24.12.2009. В итоге, если я введу дату 30.11.2009 выведутся обе записи и с датой 15.11.2009 и 24.12.2009.
0
5 / 5 / 1
Регистрация: 07.10.2009
Сообщений: 59
27.10.2009, 21:47  [ТС]
Отыскал функцию сравнения дат:

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
34
35
36
37
38
39
function compare(d_1, d_2: string): integer;
 
  function strtoint(s: string): integer;
  var res, code: integer;
  begin
    val(s, res, code);
    strtoint := res;
  end;
  function day(s: string): integer;
  begin
    day := strtoint(copy(s, 1, 2));
  end;
  function month(s: string): integer;
  begin
    month := strtoint(copy(s, 4, 2));
  end;
  function year(s: string): integer;
  begin
    year := strtoint(copy(s, 7, 2));
  end;
 
var
  yr1, yr2,
  mt1, mt2,
  dy1, dy2: integer;
 
begin
  yr1 := year(d_1); yr2 := year(d_2);
  if yr1 <> yr2 then compare := (yr1 - yr2) div abs(yr1 - yr2)
  else begin
    mt1 := month(d_1); mt2 := month(d_2);
    if mt1 <> mt2 then compare := (mt1 - mt2) div abs(mt1 - mt2)
    else begin
      dy1 := day(d_1); dy2 := day(d_2);
      if dy1 <> dy2 then compare := (dy1 - dy2) div abs(dy1 - dy2)
      else compare := 0;
    end
  end
end;
Но, просьба помочь вызвать ее в основной программе:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
program k_2_2;
uses crt;
label 1,4,5,6,8,9,10,12,20,30,40,18,19;
type
tovar=record
naimenovanie:string[30];
strana_exporter:string[30];
data_postavki:string[10];
kolichestvo_tovara:byte;
end;
var
tov:array[1..100] of tovar;
f:file of tovar;
date,str:string;
k,l,n:integer;
i,j:byte;
ch:char;
quit:boolean;
simb:set of char;
smb:set of char;
begin
10:clrscr;
textcolor(white);
writeln('   МЕНЮ   ');
writeln(' 1:  Создание файла ');
writeln(' 2:   Чтение файла  ');
writeln(' 3:  Добавление записи в файл  ');
writeln(' 4:  Выборка записей из файла  ');
writeln(' 5:      Выход      ');
{readln(k);}
repeat
ch:=readkey;
until ch in ['1'..'5'];
k:=ord(ch)-ord('0');
{readln(k);}
case k of
1:goto 6;
2:goto 20;
3:goto 30;
4:goto 40;
5:goto 12;
end;
 
 
6:clrscr;
writeln('Введите полный адрес и имя типизированного файла');readln(str);
{$I-}
assign(f,str);
rewrite(f);
{$I+}
if IoResult<>0 then begin
writeln('Повтори ввод полного пути и имени типизированного файла');
writeln('');
delay(500);
goto 6;
end
else
{$I-}
8:writeln('Введите количество записей');readln(n);
{$I+}
if (IoResult<>0) or (n<=0) then begin
writeln('Повтори ввод количества записей !!!');
delay(500);
goto 8;
end
else
writeln('Введите наименование товара, страну - экспортер, срок поставки и количество товара');
for i:=1 to n do begin
writeln('Введите данные ',i,' - й записи');
with tov[i] do begin
simb:=['А'..'Я','а'..'я',' ',#8];
write('Введите наименование товара : ');
naimenovanie:='';
repeat
if keypressed then begin
ch:=readkey;
if ch in simb then begin
write(ch);
naimenovanie:=naimenovanie+ch;
end;
end;
until ch=#13;
ch:=#0;
writeln;
write('Введите страну - экспортер  : ');
strana_exporter:='';
repeat
if keypressed then begin
ch:=readkey;
if ch in simb then begin
write(ch);
strana_exporter:=strana_exporter+ch;
end;
end;
until ch=#13;
ch:=#0;
writeln;
smb:=['1'..'9','0','.',#8];
write('Введите дату поставки       : ');
data_postavki:='';
repeat
if keypressed then begin
ch:=readkey;
if ch in smb then begin
write(ch);
data_postavki:=data_postavki+ch;
end;
end;
until ch=#13;
ch:=#0;
writeln;
{$I-}
9:write('Введите количество товара   : '); readln(kolichestvo_tovara);
{$i+}
if (IoResult<>0) or (kolichestvo_tovara<=0) or(kolichestvo_tovara>1000) then begin
writeln('Повтори ввод количества товара !!!');
delay(500);
goto 9;
end
else
writeln;
writeln('Нажмите Enter');readln;
end;
write(f,tov[i]);
end;
close(f);
str:='';
goto 10;
 
20:clrscr;
writeln('Введите полный адрес и имя типизированного файла');readln(str);
{$I-}
assign(f,str);
reset(f);
{$I+}
if IoResult<>0 then begin
writeln('Повтори ввод полного пути и имени типизированного файла');
writeln('');
delay(5000);
goto 20;
end
else
i:=0;
while not eof(f) do begin
i:=i+1;
read(f,tov[i]);
writeln(tov[i].naimenovanie);
writeln(tov[i].strana_exporter);
writeln(tov[i].data_postavki);
writeln(tov[i].kolichestvo_tovara);
 
end;
close(f);
writeln;
writeln('Для выхода в меню нажмите клавишу Enter...');
readln;
goto 10;
 
30:clrscr;
writeln('Введите полный адрес и имя типизированного файла');readln(str);
{$I-}
assign(f,str);
reset(f);
{$I+}
if IoResult<>0 then begin
writeln('Повтори ввод полного пути и имени типизированного файла');
writeln('');
delay(5000);
goto 30;
end
else
n:=filesize(f);
seek(f,n);
n:=n+1;
18:writeln('Введите количество записей');readln(n);
{$I+}
if (IoResult<>0) or (n<=0) then begin
writeln('Повтори ввод количества записей !!!');
delay(500);
goto 18;
end
else
writeln('Введите наименование товара, страну - экспортер, срок поставки и количество товара');
for i:=1 to n do begin
writeln('Введите данные ',i,' - й записи');
with tov[i] do begin
write('Введите наименование товара : '); readln(naimenovanie);
write('Введите страну - экспортер  : '); readln(strana_exporter);
write('Введите дату поставки       : '); readln(data_postavki);
{$I-}
19:write('Введите количество товара   : '); readln(kolichestvo_tovara);
{$i+}
if (IoResult<>0) or (kolichestvo_tovara<=0) or(kolichestvo_tovara>1000) then begin
writeln('Повтори ввод количества товара !!!');
delay(500);
goto 19;
end
else
writeln;
writeln('Нажмите Enter');readln;
end;
write(f,tov[i]);
end;
close(f);
goto 10;
 
40:clrscr;
writeln('Введите полный адрес и имя типизированного файла');readln(str);
{$I-}
assign(f,str);
reset(f);
{$I+}
if IoResult<>0 then begin
writeln('Повтори ввод полного пути и имени типизированного файла');
writeln('');
delay(5000);
goto 40;
end
else
writeln('Введите дату'); readln(date);
i:=0;
j:=0;
while not eof(f) do begin
i:=i+1;
read(f,tov[i]);
if tov[i].data_postavki<date then
begin
j:=1;
writeln(tov[i].naimenovanie);
writeln(tov[i].strana_exporter);
writeln(tov[i].data_postavki);
writeln(tov[i].kolichestvo_tovara);
end;
end;
if j=0 then writeln('Ни одна запись не удовлетворяет введенному условию');
close(f);
writeln;
writeln('Для выхода в меню нажмите клавишу Enter...');
readln;
goto 10;
 
 
12:clrscr;
writeln('Завершить работу программы ? ');
writeln('    "д" -да  "н"-нет   ');
repeat
if keypressed then
ch:=readkey;
case readkey of
'д':quit:=true;
'н':goto 10;
end;
until quit;
end.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
27.10.2009, 21:52
Виталий_Сигов, Вы вообще в Паскале пишете, или в Делфи? Эта функция делфийская и под Паскаль ее переписать нужно. Потом юзать. Пока Вы не выкинете свои метки, никто в Вашем коде ковыряться не будет. Быстрее новую программу с ноля написать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.10.2009, 21:52
Помогаю со студенческими работами здесь

В браузере выделить числовые/строковые данные, отображаемые в элементе <canvas>
Здравствуйте. Столкнулся с необходимостью решить такую задачу. Есть приложение Windows Forms (.NET), на форме расположен...

Как преобразовать числовые типы в CString и обратно с помощью MFC?
Я нашол в MSDN-е C-шные функции из stdlib.h типа :atof(), atoi() но это C-шные а как же MFC .Нашол и обратные функции типа _itoa() но им...

Как сравнивать строковые значения
Скажите ,как в visial basic сравнивать строковые значения? ЧТо-то вроде вот такого If IsNumeric(TextBox1.Text And...

Как правильно выделять числовые значения в запросе?
Здравствуйте. using (var connection = new OleDbConnection(&quot;Provider=&quot; + &quot;Microsoft.Jet.OLEDB.4.0;Data...

Как подставить числовые значения в порядке возрастания
Здравствуйте. Подскажите пожалуйста, как мне подставить числовые значения в порядке возрастания, к уже существующим данным в первом...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru