🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309810

strtod()

#309810
From: DMR
Date: Mon, 28 Jan 2019 16:24
17 lines
2712 bytes
K... :-(

Mam zassany do pamięci plik tekstowy (~3 MB), zadanie polega na tym, żeby znaleźć w tym buforze określone wartości (zmiennoprzecinkowe), przeliczyć, PODMIENIĆ (tak się szczęśliwie składa, że wynikowe sekwencje znaków są krótsze), zapisać ten blok do pliku i święto wiosny.

Samo się narzuca użycie do "sparsowania" danych stworzonej do takich celów funkcji strtod().
Wszystko jasne, jak pomyślałem, tak zrobiłem - ale po odpaleniu programu... zwiecha, wentylator wyje, i7 zarżnięty na 100%...
Siłowe zarżnięcie pętli na 1000 linii daje zawrotny czas wykonania programu równy prawie 2.5 sekundy. Krótsze pliki liczyły się poprawnie, ale pół sekundy na przetworzenie 200 linii... Coś tu nie gra.
Kombinowałem wielorako, nawet podmieniłem to na sscanf() - to samo.
W końcu coś mnie tknęło i przed parsowaniem popodmieniałem w buforze znaki za wczytywanymi wartościami zerami - wszystko ruszyło, jak trzeba!
No i już widać w czym problem...

Funkcja strtod() za każdym razem poprawnie zwracała endptr, więc ja się pytam - po jaką cholerę gmera ona jeszcze coś w buforze za tym znakiem? Końcowe zero nie jest jej przecież do niczego potrzebne. Przy sscanf() jeszcze jest to zrozumiałe, ale tu?

No i co ja mam teraz zrobić? :-(

Jest gdzieś dostępne źródło TEJ funkcji, żeby sobie nanieść poprawki?
Działam na C::B + MinGW
Technical Details
Message-ID: <9a80cb46-c718-453a-8c62-8ef4734a71e4@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!newsreader4.netcologne.de!news.netcologne.de!peer02.ams1!peer.ams1.xlned.com!news.xlned.com!peer02.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!v55no10826107qtk.0!news-out.google.com!m21ni12790qta.0!nntp.google.com!v55no10826095qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:5246:: with SMTP id g67mr310734qkb.40.1548692683049;        Mon, 28 Jan 2019 08:24:43 -0800 (PST)
X-Received: by 2002:a5b:98a:: with SMTP id c10mr4777ybq.0.1548692682848; Mon, 28 Jan 2019 08:24:42 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!newsreader4.netcologne.de!news.netcologne.de!peer02.ams1!peer.ams1.xlned.com!news.xlned.com!peer02.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!v55no10826107qtk.0!news-out.google.com!m21ni12790qta.0!nntp.google.com!v55no10826095qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Mon, 28 Jan 2019 08:24:42 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=80.238.104.22; posting-account=FE4hoAoAAADKg8EtnA4bEyQiJf7iqAgV
NNTP-Posting-Host: 80.238.104.22
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <9a80cb46-c718-453a-8c62-8ef4734a71e4@googlegroups.com>
Subject: strtod()
From: DMR <mezzogm@gmail.com>
Injection-Date: Mon, 28 Jan 2019 16:24:43 +0000
X-Received-Bytes: 2891
X-Received-Body-CRC: 1968493829
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit