ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [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: [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

* [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

* 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