Popripade prosim o radu jakym efektivnim spusobem pri c# nahradit Cečkovské scanf(); Dekuju ide o spracovani predem daneho řetezce a prideleni vnitřních dat napr do prograssbaru alebo Label. Dekuju
Příspěvky odeslané z IP adresy 89.103.90.–
Dobrý večer, Mam takový dotaz. Mam v c# form aplikaci a stale mi to při try
catch (ochytavani vynimek) vypisuje chybu : Řetězec nemá správný vstupní formát. Skoušel sem to debugovat ale stale nemožen najit tu chybu.Jak vstupný řetezec je posilany po serové komunikaci. Dekuju moc za každou radu :)
private void set_axis(string text)
{
try //ošetreni chyb
{
if (this.X_progressBar.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(set_axis);
this.Invoke(d, new object[] { text });
}
else
{
str += text;
int i1 = str.IndexOf("BEG");
int i2 = str.IndexOf("BEG", 1 + i1);
if ((-1 != i1) && (-1 != i2))
{
string current = str.Substring(0, i2);
current = current.Substring(current.IndexOf("BEG"));
str = str.Substring(i2);
int beg_index = current.IndexOf("BEG");
int x_index = current.IndexOf("X");
int y_index = current.IndexOf("Y");
int z_index = current.IndexOf("Z");
if ((0 != beg_index) || (3 != x_index) || (-1 == y_index) || (-1 == z_index))
{//Error XXX ,beg_index = XXX , x_index = XX , y_index = XX , z_index = XX
MessageBox.Show("Error " + current + ", beg_index = " + beg_index.ToString() + ", x_index = " + x_index.ToString() + ", y_index = " + y_index.ToString() + ", z_index = " + z_index.ToString());
return;
}
int x = Convert.ToInt32(current.Substring(x_index + 1, y_index - x_index - 1));
int y = Convert.ToInt32(current.Substring(y_index + 1, z_index - y_index - 1));
int z = Convert.ToInt32(current.Substring(z_index + 1));
if (x > X_progressBar.Maximum) x = X_progressBar.Maximum;
if (y > Y_progressBar.Maximum) y = Y_progressBar.Maximum;
if (z > Z_progressBar.Maximum) z = Z_progressBar.Maximum;
if (x < X_progressBar.Minimum) x = X_progressBar.Minimum;
if (y < Y_progressBar.Minimum) y = Y_progressBar.Minimum;
if (z < Z_progressBar.Minimum) z = Z_progressBar.Minimum;
X_progressBar.Value = x;
Y_progressBar.Value = y;
Z_progressBar.Value = z;
}
}
}
catch (Exception x)
{
MessageBox.Show(x.Message.ToString());
}
}
Neporadi lebo už sem to tady daval vic krát a nidko nikdo s tym nevedel rady :( a daval sem to už na vicere fora a nikde nic
Zdar, Netuší nekdo jak s tehoto spravyt dll aby sa to pridalo do toolbogu alebo aspon každe jedno dat na zvlašt form pomoci pictureboxu aby to nejak fungovatlo? trtkám sa s tym asi 3 tydne a prd. DIk za každu radu
http://www.codeproject.com/Articles/27411/C-Avionic-Instrument-Controls
no prave že u tehotoi sa mi podarylo snad vychytat všetko okrem teho zamrzana a to je to cos napsal asi
Zdravím :) diky za super rady preštudujem to ale tady postujem asi najlepší kod ktery sa mi podaryli :) neukamenujte ma ked to bude moc zle sem v c# total začatečnik. Diky za každu radu :)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace Zeus
{
public partial class Form4_TCP_SERVER : Form
{
private TcpClient client;
public StreamReader STR;
public StreamWriter STW;
public string receive;
public string text_to_send;
public Form4_TCP_SERVER()
{
InitializeComponent();
IPAddress[] localIP = Dns.GetHostAddresses(Dns.GetHostName()); //získat vlastní IP
foreach (IPAddress addres in localIP)
{
if (addres.AddressFamily == AddressFamily.InterNetwork)
{
textBox_IP.Text = addres.ToString(); //po načitani IP zapisani do textboxu
}
}
}
private void click_connect(object sender, EventArgs e) // tlačitko na aktivovani serveru
{
try
{
if (textBox_Port.Text == "" || textBox_IP.Text == "") // ošetreni ked neni zadane jedna z dvoch veci bud IP alebo port
{
MessageBox.Show(this, "Trotle zvol Port alebo IP adresu.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); //vypisani vyskakujuceho okna
}
else
{
TcpListener listener = new TcpListener(IPAddress.Any, int.Parse(textBox_Port.Text)); // dva radky na zahajeni komunikace po TCP/IP naslouchani
listener.Start();
client = listener.AcceptTcpClient();
STR = new StreamReader(client.GetStream());
STW = new StreamWriter(client.GetStream());
STW.AutoFlush = true;
backgroundWorker1.RunWorkerAsync(); //zahájení příjmu dat
backgroundWorker2.WorkerSupportsCancellation = true; //Možnost zrušit toto vlákno
}
}
catch (UnauthorizedAccessException)
{
MessageBox.Show(this, "Neautorizovany pristup.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void click_send(object sender, EventArgs e)
{
if (textBox_send.Text == "")
{
MessageBox.Show(this, "Nejsou zadané žadne parametry na poslaní.", "WARNING", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
text_to_send = textBox_send.Text;
backgroundWorker2.RunWorkerAsync();
}
textBox_send.Text = "";
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (client.Connected)
{
try
{
receive = STR.ReadLine();
this.textBox_message.Invoke(new MethodInvoker(delegate() { textBox_message.AppendText("You : " + receive + "\n"); }));
receive = "";
}
catch (Exception x)
{
MessageBox.Show(x.Message.ToString());
}
}
}
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
try
{
if (client.Connected)
{
STW.WriteLine(text_to_send);
this.textBox_message.Invoke(new MethodInvoker(delegate() { textBox_message.AppendText("Me : " + text_to_send + "\n"); }));
}
else
{
MessageBox.Show("send failed!");
}
backgroundWorker2.CancelAsync();
}
catch (Exception x)
{
MessageBox.Show(x.Message.ToString());
}
}
private void Click_clear(object sender, EventArgs e)
{
textBox_message.Clear();
}
}
}
ešte take doplnujuce mam videro verzii programu a u každeho je nejaka vada na kteru nemožu dojit u jedneho pracuju cez backgroundworker .... a u dalšich cez Thread
Ahojte, stretel sa nekdo s tym že ked pisal server pro TCP/IP komunikaci se "soketama" tak mu to zamrzalo? dočital sem sa na nete že to je tym že ked čekam na klienta musim čekat v jinem vlakne. ale ni to mi nejak moc nepomohlo. nemate nekdo odkaz na nejaky dobry tutorial kde je to dost dobre vysvetlene? našel sem same nedokonale a nedotahnute dokonca. Keby sa mi podarylo spravit fungujuci program na Server aj Client rad bych na to napisal nejaky važne prehladny tutorial s najčastejšíma chybama. Diky
Tak henten navod sem taky už mnel davno najity. ale jak to skomprimovat do dll v VS2013 s novyma frameworkama to je otazka...
o to sa snažim už asi tyden :D nemožem dojit na spusob jak to dostat do toolboxu(asi) tu komponentu stalo to chce nejaku dll knižnicu kteru nedokažem najit a/alebo vytvorit sem total Lama na to asi. TO je na mna jiny level vždy sem robil len take lachšie programky.
jo mam ked to otevrem ten projekt tak jak to je tak to ide .... ale ked to chcem použit v mojem vetšim projekte že tam chcem vložit len jeden z tychto všetkych tak mi to nejde. Vyhodi to taku škaredu tabulku.
Nemate nekdo skusenosti s tym aby fungovalo s visual studio 2013 a na framework 4.0 alebo 4.5 ?
http://www.codeproject.com/Articles/27411/C-Avionic-Instrument-Controls .... Hadže to milion erroru a ani po dvoch dnoch googlena a experimentovana sem nedošel nato co s tym je. Diky za každu radu :) nejde mi o to mat presne toto ale neco na tento štyl len :)
Ahojte, mam dotaz že ked vytvram aplikaciu kde pracuju s vicero Formama. Ked vytvorim instanci noveho formu a zavolam form.show(); na novy tak nechcem cez hide ten stary skovaš ale totalne zrušit ale ked dam close(); tak totalne zmyznu obydva ... nevite jak to vyřešit?
ide o sutaž s čoklady :D a len to z nudy skušam :D ide mi o to skorej to skusit naprogramovat a zlepšit svuj obzor než o tu sutaž :D vyhry su tam kraviny :D šetrič obrazovky a tak ... :D
BKX9XLGWR3
ZD7X9JDHGX
JSZPNRT9ZH
RD797X4K7M
Mam napriklad taketo kody zadane :)
Toš zduř :)
Mam dotaz dostal sem za ukol spravit generator kodu a absolutne netuším jak začat . Podminka je že mam zadane 4 kodove čisla a ja musim zistit jejich suvislost jak byly generovane a mam vygenerovat další s rovnaku posloupnosti. Za každy napadat velke dik :)
Dekuju Hu :) už to ide :) dobry napad to spravit cez ten znak :)
Dobry večer :) Prosim o pomoc trocha som sa zasekol a neviekm naist chybu a už do toho pozeram asi tri hodiny:
int strida(char *str,int vstup)
{
str += vstup;
unsigned hodnota = 0;
while (*str != ',') {
hodnota = hodnota*10 + *(str++) - '0';
}
return hodnota;
}
Mam pole charu kde su čuzne dlha unsigned hodnotu ... pole bude naplnene random počtem hodnot ale ich rozsah je od 000 do 255 .... vždy ale v tvare 010,205,101,001,006,205.....
ide o to aby to načitalo vždy čisla do int vstupny parameter je ukazatel na pole a poradi začinajuceho prvku ... odelene su vždy čiarkou.Hadže to random hodnoty :/ a občas aj zaporne :D testoval sem to na
unsigned a=0;
char txt[32];
char pom[32];
a=strida(pom,5);
b=strida(pom,9);
sprintf(txt,"%d,%d",a,b);
// pom obsahuje napr <X,Y,005,105> .... X a Y su jednoynakove pismenka proste char
Dakujem za každu radu ...
Ked to robim v PC tak v pohode si spravim nejake enum s stavama a potom postupujem v stavoch a prepinam to ale nevím si to predstavit v procesore.
nedalo by sa to spravit cez atoi() ?? Stavovy automat v main by byl celkem užitečny ale jak zapisal programovo ? cez switch?
temp = temp*10 + ch - '0';
nac tam presne toto prosimta? a nebude to len čislo bude tam aj znaky kere určuju smer ide o ovladani motorku.
uprimne povidane nidky sem pro uC neprogramoval anevim jak to vnutri nich presne funguje jak pracovat a pametama ked tam mam EEPROM, FLASH a RAM ... a ked sem programoval pro PC tak if byla moja jedina volba společne s for..... switch sem nikdy v živote v žadnem projekte nepožil
čago belo :D Mam taky problem že sem nejaky zmateny s spracovana stringu pri primany.Jak by ste mi doporučili spravovata pomocou preušena prijem nejakeho retazca? potrebujem posilat z PC do uC čislo od 0-255 jak střidu pro PWM. nech si ten uC jede svuj život a ked zrazu dojdu nejaky znak alebo čislo nech sa prispusoby a potom nech zas jede dal ?? Dekuju
Takže bude vyhodnejšíe to spravit len cez unsigned char? a žadny efektivny cyklus mna nenapadel toto je naefektivnejí a fungujuce co mna napadlo.
čaute borci :) potreboval bych poradit kde robím chybu prosim, C sem sa učil prevažne na PC takže netuším co všetko si možem dovolit pri programovaci pre AVR da to niekde naist? plus kde robím chybu v tomto programe?
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "find.h"
unsigned char zisti(char *str)
{
unsigned char stav;
if(('A' == str[0]) & ('A' == str[1]))stav = 1;
if(('A' == str[0]) & ('B' == str[1]))stav = 2;
if(('B' == str[0]) & ('A' == str[1]))stav = 3;
if(('B' == str[0]) & ('B' == str[1]))stav = 4;
return stav;
}
int8_t strida(char *str)
{
int8_t a = 0, b = 0, c = 0, d = 0;
if('1' == str[2])a = 100;
if('2' == str[2])a = 200;
else a = 0;
//if('3' == str[2])a = 300;
//if('4' == str[2])a = 400;
//if('5' == str[2])a = 500;
//if('6' == str[2])a = 600;
//if('7' == str[2])a = 700;
//if('8' == str[2])a = 800;
//if('9' == str[2])a = 900;
if('1' == str[3])b = 10;
if('2' == str[3])b = 20;
if('3' == str[3])b = 30;
if('4' == str[3])b = 40;
if('5' == str[3])b = 50;
if('6' == str[3])b = 60;
if('7' == str[3])b = 70;
if('8' == str[3])b = 80;
if('9' == str[3])b = 90;
if('0' == str[3])b = 0;
if('0' == str[4])c = 0;
if('1' == str[4])c = 1;
if('2' == str[4])c = 2;
if('3' == str[4])c = 3;
if('4' == str[4])c = 4;
if('5' == str[4])c = 5;
if('6' == str[4])c = 6;
if('7' == str[4])c = 7;
if('8' == str[4])c = 8;
if('9' == str[4])c = 9;
d = a + b + c;
if(d > 255)d = 0;
return d;
}
Ty zakomentovane časti mi piše že preteka kedže vim že uint8_t ma max 255 ... takže bych mal použit uint16_t ??aj ked použivat procesot atmega8? osmibitovy? potrebujem pri poslani stringu znaku uloženych do pola :
potrebujem rozoznač či je zadane AA,AB,BA,BB ... a čislo od 0-255 . Dekuju
no ty RX mam takto
#define RX_UKONCENE 1
#define RX_NEUKONCENE 2
a ked sem upravil main tak mi to funguje ...
while(1){
if(uart_gets(pole)){
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts(pole);
uart_puts(pole);
}
}
Nejak nechapem vaše myšlenkove pochody kde tam mam neco zle
Zdravím, Mam menší problem s primem alebo s uloženim retazcem stringu do pole kere dalej možem v main využit a spracovavat. Ked primam jeden char tak to ide ale ked chcem prijat retazek už to nerobí nic. sem koncoch :/ a sem začatečnik robil sem to pomocou datasheetu plus neco z netu tak ked to bude cele zle snad ma neukamunejete
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>
#include <avr/interrupt.h>
#include "uart.h"
#include "lcd.h"
int main(){
char pole[16];
char text[32];
uart_init(4800);
lcd_init(LCD_DISP_ON);
lcd_clrscr();
lcd_gotoxy(0,1);
lcd_puts(" Funguju a Ahoj");
_delay_ms(2000);
lcd_clrscr();
while(1){
uart_getc(pole);
sprintf(text,"hodnota:%c",pole);
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts(text);
_delay_ms(2000);
}
return 0;
}
ISR(USART_RXC_vect)
{
if (rx_pos == BUF_SIZE) rx_pos = 0;
if(rx_stav != RX_UKONCENE){
rx_buff[rx_pos] = UDR;
//ak prisiel ukoncovaci znak
if ((rx_buff[rx_pos] == '\r')|(rx_buff[rx_pos]=='\n')){
rx_buff[rx_pos+1] = '\0';
rx_stav = RX_UKONCENE;
}else{
rx_pos++;
}
}
}
unsigned char uart_gets(char* rx_pole){
if(rx_stav == RX_UKONCENE) {
strcpy(rx_pole, rx_buff);
rx_stav = RX_NEUKONCENE;
rx_pos = 0;
return 1;
}else{
rx_pole = 0;
return 0;
}
}