/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
String konvertering ?
Fra : Bo Carøe


Dato : 24-07-03 09:11

Hej.
Da jeg er ved at lave et log program så jeg kan logge data, og
analysere data fra min vindmølle.
Mine data kommer ind via seriel porten som en lang streng og jeg har
fået dem i en array[14][45]

Så dataen ser sådan ud:

string[0]="Wind: 4.4 Gen: 1002 Pow : 5 Rot: 56 "
string[1]="Free wheeling System OK "
string[2]="Brake: OFF Key: OFF Mode : AUT Yaw: "
string[3]="231 230 227 [V] 12 12 12 [A] "
string[4]=" 3 3 3 [P] Power : 2.2 kW "
string[5]="Generator 1002.2 RPM Rotor 56.1 RPM "
string[6]="Line Freq. 49.91 Hz Wind 2.5 m/s "
string[7]="Power avg. 0.1 kW Wind avg. 1.8 m/s "
string[8]="Power peak. 0.2 kW Wind peak. 4.0 m/s "
string[9]="Temp 1: 16.1 ?C Temp 2: 17.1 ?C "
string[10]="Tot kWh: 11248.4 Tot h: 2962 "
string[11]="Sub kWh: 1018.8 Sub h: 316 "
string[12]="Time: 09.09.17 Date: 24.07.03 "
string[13]="+****- +1111- +1111- +1101- +1111- +1111- "
string[14]="Relay : 11000000 System : 0 "


Så er det hvordan får jeg overført alle værdierne til nogle variabler
på den smarteste måde.
eks. Genetator 1002.2 RPM, der vil jeg gerne have de 1002.2 puttet
over i en float osv..


Mvh Bo Carøe


 
 
Kent Friis (24-07-2003)
Kommentar
Fra : Kent Friis


Dato : 24-07-03 11:06

Den Thu, 24 Jul 2003 10:10:44 +0200 skrev Bo Carøe:
>string[0]="Wind: 4.4 Gen: 1002 Pow : 5 Rot: 56 "
>
>Så er det hvordan får jeg overført alle værdierne til nogle variabler
>på den smarteste måde.
>eks. Genetator 1002.2 RPM, der vil jeg gerne have de 1002.2 puttet
>over i en float osv..

sscanf eller fscanf

Mvh
Kent
--
Avoid the Gates of Hell. Use Linux
(Unknown source)

Igor V. Rafienko (24-07-2003)
Kommentar
Fra : Igor V. Rafienko


Dato : 24-07-03 17:01

[ Bo Carøe ]

[ ... ]

> Så er det hvordan får jeg overført alle værdierne til nogle variabler
> på den smarteste måde.


Da må du fortelle litt mer om hvordan dataene ser ut (altså, ikke ett
eksempel, men en (gjerne formell) beskrivelse av syntaksen (fx. BNF))
og hva du er interessert i å trekke ut. I utgangspunktet, sscanf og
str*-funksjoner.





ivr
--
<html><form><input type crash></form></html>

René Allan Larsen (24-07-2003)
Kommentar
Fra : René Allan Larsen


Dato : 24-07-03 18:29

In article <3F1F9484.3050609@get2net.dk>, Bo Carøe wrote:
>
> Hej.
> Da jeg er ved at lave et log program så jeg kan logge data, og
> analysere data fra min vindmølle.
> Mine data kommer ind via seriel porten som en lang streng og jeg har
> fået dem i en array[14][45]
>
> Så dataen ser sådan ud:
>
[Data fjernet]
>
> Så er det hvordan får jeg overført alle værdierne til nogle variabler
> på den smarteste måde.
> eks. Genetator 1002.2 RPM, der vil jeg gerne have de 1002.2 puttet
> over i en float osv..

Ser dataene altid nøjagtigt sådan ud (i den rækkefølge osv.)?

Hvis ja, så er her et lille program, som kan udtrække data fra
"Generator"-linjen v.hj.a. "sscanf":

#include <string.h>
#include <stdio.h>

int main(void) {
char string[15][46];
float fGenerator, fRotor;
double dGenerator, dRotor;
char sGenerator[46], sRotor[46];

strcpy(string[5], "Generator 1002.2 RPM Rotor 56.1 RPM ");

sscanf(string[5], "Generator %s RPM Rotor %s RPM ", &sGenerator,
&sRotor)
printf("Generator = [%s], Rotor = [%s]\n", sGenerator, sRotor);

sscanf(string[5], "Generator %f RPM Rotor %f RPM ", &fGenerator,
&fRotor);
printf("Generator = [%f], Rotor = [%f]\n", fGenerator, fRotor);

sscanf(string[5], "Generator %lf RPM Rotor %lf RPM ", &dGenerator,
&dRotor);
printf("Generator = [%lf], Rotor = [%lf]\n", dGenerator, dRotor);

return 0;
}

Men bemærk forskellen på de tre udskrifter:
Generator = [1002.2], Rotor = [56.1]
Generator = [1002.200012], Rotor = [56.099998]
Generator = [1002.200000], Rotor = [56.100000]

Den eneste type som med garanti altid kan indeholde dine præcise værdier
er faktisk char[] ;)

Hvis ikke dataene altid ser nøjagtigt sådan ud , er der ingen vej udenom
at lave en parser.

Venlig hilsen, René


Bo Carøe (24-07-2003)
Kommentar
Fra : Bo Carøe


Dato : 24-07-03 21:38

Hej
Tak for de hurtig svar, jeg har fået det til at virke med sscanf lige
som eks.
Jeg kunne hvis ikke se skoven for bare træer.

Med venlig hilsen Bo.




René Allan Larsen wrote:
> In article <3F1F9484.3050609@get2net.dk>, Bo Carøe wrote:
>
>>Hej.
>>Da jeg er ved at lave et log program så jeg kan logge data, og
>>analysere data fra min vindmølle.
>>Mine data kommer ind via seriel porten som en lang streng og jeg har
>>fået dem i en array[14][45]
>>
>>Så dataen ser sådan ud:
>>
>
> [Data fjernet]
>
>>Så er det hvordan får jeg overført alle værdierne til nogle variabler
>>på den smarteste måde.
>>eks. Genetator 1002.2 RPM, der vil jeg gerne have de 1002.2 puttet
>>over i en float osv..
>
>
> Ser dataene altid nøjagtigt sådan ud (i den rækkefølge osv.)?
>
> Hvis ja, så er her et lille program, som kan udtrække data fra
> "Generator"-linjen v.hj.a. "sscanf":
>
> #include <string.h>
> #include <stdio.h>
>
> int main(void) {
> char string[15][46];
> float fGenerator, fRotor;
> double dGenerator, dRotor;
> char sGenerator[46], sRotor[46];
>
> strcpy(string[5], "Generator 1002.2 RPM Rotor 56.1 RPM ");
>
> sscanf(string[5], "Generator %s RPM Rotor %s RPM ", &sGenerator,
> &sRotor)
> printf("Generator = [%s], Rotor = [%s]\n", sGenerator, sRotor);
>
> sscanf(string[5], "Generator %f RPM Rotor %f RPM ", &fGenerator,
> &fRotor);
> printf("Generator = [%f], Rotor = [%f]\n", fGenerator, fRotor);
>
> sscanf(string[5], "Generator %lf RPM Rotor %lf RPM ", &dGenerator,
> &dRotor);
> printf("Generator = [%lf], Rotor = [%lf]\n", dGenerator, dRotor);
>
> return 0;
> }
>
> Men bemærk forskellen på de tre udskrifter:
> Generator = [1002.2], Rotor = [56.1]
> Generator = [1002.200012], Rotor = [56.099998]
> Generator = [1002.200000], Rotor = [56.100000]
>
> Den eneste type som med garanti altid kan indeholde dine præcise værdier
> er faktisk char[] ;)
>
> Hvis ikke dataene altid ser nøjagtigt sådan ud , er der ingen vej udenom
> at lave en parser.
>
> Venlig hilsen, René
>


Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste