Jeg tager en række værdier ind fra min seriel port som en String. Det drejer sig om 4 værdier i intervallet 0-99, der er adskilt af et mellemrum. Eksempler:
99 14 56 99 43 89 99 13 32 67 56 78 osv.
Som sagt bliver de indlæst som String med metoden readLine:
public void readLine() { String line = null; while(true) { try { line = in.readLine(); System.out.println(line); } catch( IOException e ) { error("readLine " + e ); } } }
Jeg behøver værdierne én for én og konverteret til float-værdier. Dvs. sige at jeg skal kunne sende dem videre enkeltvist som float-værdier. Nogen der har gode forslag?
Hvad med at bruge en StringTokenizer til at splitte strengen på mellemrum, så vil hver token være tal som kan konverteres til float med: float tmp = Float.parseFloat("22");
Du kan bruge en StringTokenizer, hvor mellemrum bliver brugt som adskillelse mellem tokens, og de 4 tokens, du får kan du konvertere til f.eks. int vha. Integer.parseInt(String s). En implementation kunne se således ud:
int readInt = 0; String s = "99 14 56 99" StringTokenizer st = new StringTokenizer(s, " "); while (st.hasMoreTokens()) { readInt = Integer.parseInt(st.nextToken(); //behandling af readInt }
Du får også lige mit eksempel (nu jeg alligevel havde lavet det, det kompilerer endda :-)
import java.util.*;
public class MainTester { public static float[] getFloats(String str) { StringTokenizer st = new StringTokenizer(str, " "); float array[] = new float[st.countTokens()]; int i = 0; while(st.hasMoreTokens()) { array[i] = Float.parseFloat(st.nextToken()); i++; } return array; }
Jeg får løbende værdier, ja faktisk værdier ind hver 7 ms. Vil det så stadig fungere? Det virker lidt til, at du samler op åp værdierne og så udskriver tilsidst.
Min kode illustrerer blot et eksempel på brug af StringTokenizer. Hvordan du optimalt kan flette den ind i din kode kan jeg ikke udtale mig om på baggrund af info.
Hvad skal data bruges til ? Hvad sker der når data er konverteret til floats ?
Dataen skal bruges til at regulere en synth i programmet MAX/MSP. Jeg har allerede lavet synth'en men mangler nu at få den styret af værdierne. Float-værdierne skal altså senden til interfacet mellem Java-programmet og MAX/MSP.
Ja, det ser super ud! Du får point...bare lige to sidste spørgsmål. Tror du ikke, at det belaster systemet en anelse, at man skal oprette StringTokenizer objekter for hver værdier, der kommer ind hvert 7 ms. Er der ikke en eller anden måde, man kan "rense" systemt på? Og så vil eg også lige høre om du har en idé til, hvordan jeg undgår at systemet går istå, hvis der kommer værdier med fejl i? Systemet har lige crashet fordi der kom en værdi efterfulgt af en mystisk firkant.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.