* [Comm] Вопрос по программированию на языке Си
@ 2003-01-15 20:30 Andrey Brindeew
2003-01-15 21:09 ` Anton Kovalenko
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Andrey Brindeew @ 2003-01-15 20:30 UTC (permalink / raw)
To: ALTLinux community
[-- Attachment #1: Type: text/plain, Size: 1074 bytes --]
Hi!
Вчера возникла по ходу работы задача по программированию на Си (не у меня),
я долго читал info glibc, но правильных ответов не нашел. :-(
Есть текстовый файл, в котором записаны несколько чисел:
===
6039.689 2 34.98 9 1 5.6250 63.2813
===
Как их оттуда прочитать и запихать в переменные типа float?
Количество полей для обрабатываемого файла известно.
Смысл такой: прочитать, а потом вывести в указанном формате (printf).
Как читать, это и есть проблема. Дошел до описания функции getline, но
дальше ничего не понял. :-(
P.S. В приведенном примере указано 7 полей, количество полей во всем файле
не изменяется, могут быть некоторые "неоднородности" типа замены нескольких
пробелов на один \t и сдвиги, поэтому нельзя закладываться на тот факт, что
первое число занимает первые N байт в строке.
P.P.S. Сам я чистой воды perl'овщик, Си знаю на уровне "когда-то в отпуске
читал Кернигана", так что просьба ногами сильно не бить.
--
WBR, Andrey Brindeew.
"No one person can understand Perl culture completely"
(C) Larry Wall.
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Comm] Вопрос по программированию на языке Си
2003-01-15 20:30 [Comm] Вопрос по программированию на языке Си Andrey Brindeew
@ 2003-01-15 21:09 ` Anton Kovalenko
2003-01-16 5:54 ` [Comm] Re: [Comm]Вопрос " "Инженер"
2003-01-16 9:11 ` [Comm] Re: [Comm] " isa
2 siblings, 0 replies; 6+ messages in thread
From: Anton Kovalenko @ 2003-01-15 21:09 UTC (permalink / raw)
To: community
>>>>> Andrey Brindeew writes:
> Есть текстовый файл, в котором записаны несколько чисел:
> ===
> 6039.689 2 34.98 9 1 5.6250 63.2813
> ===
> Как их оттуда прочитать и запихать в переменные типа float?
> Количество полей для обрабатываемого файла известно.
А чем не устраивает fscanf?
fscanf (fptr, "%f %f %f %f %f %f %f", &fl1, &fl2, &fl3, &fl4, &fl5, &fl6, &fl7)
--
With Best Wishes, Anton Kovalenko /* http://kovalenko.webzone.ru */
#!/usr/bin/wish - best wish I have for you!
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Comm] Re: [Comm]Вопрос по программированию на языке Си
2003-01-15 20:30 [Comm] Вопрос по программированию на языке Си Andrey Brindeew
2003-01-15 21:09 ` Anton Kovalenko
@ 2003-01-16 5:54 ` "Инженер"
2003-01-17 13:57 ` [Comm] Re: Вопрос " Alexey Tourbin
2003-01-16 9:11 ` [Comm] Re: [Comm] " isa
2 siblings, 1 reply; 6+ messages in thread
From: "Инженер" @ 2003-01-16 5:54 UTC (permalink / raw)
To: community
>Есть текстовый файл, в котором записаны несколько чисел:
>===
> 6039.689 2 34.98 9 1 5.6250 63.2813
>===
>Как их оттуда прочитать и запихать в переменные типа float?
>Количество полей для обрабатываемого файла известно.
>Смысл такой: прочитать, а потом вывести в указанном формате (printf).
>Как читать, это и есть проблема. Дошел до описания функции getline, но
>дальше ничего не понял. :-(
Читай описания fread (если я правильно помню) и feof (это
к определению конца файла, ведь по условию число полей
в исходном файле неизвестно).
>поэтому нельзя закладываться на тот факт, что
>первое число занимает первые N байт в строке.
Это уже тяжелее :(
Навскидку ничего предложить не могу.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Comm] Re: Вопрос по программированию на языке Си
2003-01-16 5:54 ` [Comm] Re: [Comm]Вопрос " "Инженер"
@ 2003-01-17 13:57 ` Alexey Tourbin
0 siblings, 0 replies; 6+ messages in thread
From: Alexey Tourbin @ 2003-01-17 13:57 UTC (permalink / raw)
To: community
[-- Attachment #1: Type: text/plain, Size: 895 bytes --]
On Thu, Jan 16, 2003 at 08:54:20AM +0300, "Инженер" wrote:
> >Есть текстовый файл, в котором записаны несколько чисел:
> >===
> > 6039.689 2 34.98 9 1 5.6250 63.2813
> >===
>
> >Как их оттуда прочитать и запихать в переменные типа float?
> >Количество полей для обрабатываемого файла известно.
> >Смысл такой: прочитать, а потом вывести в указанном формате (printf).
>
> >Как читать, это и есть проблема. Дошел до описания функции getline, но
> >дальше ничего не понял. :-(
>
> Читай описания fread (если я правильно помню) и feof (это
> к определению конца файла, ведь по условию число полей
> в исходном файле неизвестно).
Вы чего, опупели? :)
scanf(3) ещё никто не отменял.
> >поэтому нельзя закладываться на тот факт, что
> >первое число занимает первые N байт в строке.
> Это уже тяжелее :(
> Навскидку ничего предложить не могу.
--
WBR, Alexey Tourbin
BIOZAK Ltd., Russia
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Comm] Re: [Comm] Вопрос по программированию на языке Си
2003-01-15 20:30 [Comm] Вопрос по программированию на языке Си Andrey Brindeew
2003-01-15 21:09 ` Anton Kovalenko
2003-01-16 5:54 ` [Comm] Re: [Comm]Вопрос " "Инженер"
@ 2003-01-16 9:11 ` isa
2003-01-18 11:43 ` [JT][Comm] " Someone Unknown
2 siblings, 1 reply; 6+ messages in thread
From: isa @ 2003-01-16 9:11 UTC (permalink / raw)
To: Andrey Brindeew
Здравствуйте, Andrey.
Вы писали 15 января 2003 г., 22:30:02:
AB> Hi!
AB> Вчера возникла по ходу работы задача по программированию на Си (не у меня),
AB> я долго читал info glibc, но правильных ответов не нашел. :-(
AB> Есть текстовый файл, в котором записаны несколько чисел:
AB> ===
AB> 6039.689 2 34.98 9 1 5.6250 63.2813
AB> ===
AB> Как их оттуда прочитать и запихать в переменные типа float?
AB> Количество полей для обрабатываемого файла известно.
AB> Смысл такой: прочитать, а потом вывести в указанном формате (printf).
AB> Как читать, это и есть проблема. Дошел до описания функции getline, но
AB> дальше ничего не понял. :-(
AB> P.S. В приведенном примере указано 7 полей, количество полей во всем файле
AB> не изменяется, могут быть некоторые "неоднородности" типа замены нескольких
AB> пробелов на один \t и сдвиги, поэтому нельзя закладываться на тот факт, что
AB> первое число занимает первые N байт в строке.
AB> P.P.S. Сам я чистой воды perl'овщик, Си знаю на уровне "когда-то в отпуске
AB> читал Кернигана", так что просьба ногами сильно не бить.
Можно читать строку, выкусывать разделители /t,' ' как разделители
полей и /n как разделители строк, если нужно могу накрапать
кусочек и кинуть приватом
--
С уважением,
isa mailto:iscander@mercuri.mk.ua
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [JT][Comm] Re: [Comm] Вопрос по программированию на языке Си
2003-01-16 9:11 ` [Comm] Re: [Comm] " isa
@ 2003-01-18 11:43 ` Someone Unknown
0 siblings, 0 replies; 6+ messages in thread
From: Someone Unknown @ 2003-01-18 11:43 UTC (permalink / raw)
To: community
В сообщении от 16 Январь 2003 12:11 isa написал:
> AB> P.P.S. Сам я чистой воды perl'овщик, Си знаю на уровне "когда-то
> в отпуске AB> читал Кернигана", так что просьба ногами сильно не
> бить.
>
> Можно читать строку, выкусывать разделители /t,' ' как
> разделители полей и /n как разделители строк, если нужно могу
> накрапать кусочек и кинуть приватом
Угу... А можно написать объектную либу для этого дела... А еще лучше
использовать corba - она для того и нужна...
Не, определенно, народ сошел с ума.
#include <stdio.h>
int main(int argc,char **argv)
{
float f[7];
FILE *f=fopen(argv[1],"r");
while(!feof(f)) {
fscanf("%f %f %f %f %f %f
%f",&f[0],&f[1],&f[2],&f[3],&f[4],&f[5],&f[6]);
printf("Как-вам-тут-надо-это-печатать: 1 => %f, 3 => %f и
т.д.\n",f[0],f[2]);
}
fclose(f);
return 0;
}
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2003-01-18 11:43 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-15 20:30 [Comm] Вопрос по программированию на языке Си Andrey Brindeew
2003-01-15 21:09 ` Anton Kovalenko
2003-01-16 5:54 ` [Comm] Re: [Comm]Вопрос " "Инженер"
2003-01-17 13:57 ` [Comm] Re: Вопрос " Alexey Tourbin
2003-01-16 9:11 ` [Comm] Re: [Comm] " isa
2003-01-18 11:43 ` [JT][Comm] " Someone Unknown
ALT Linux Community general discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
public-inbox-index community
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.community
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git