|
| 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é
>
| |
|
|