Ende der String Variable

Bild

Betrifft: Ende der String Variable von: Sergej
Geschrieben am: 02.03.2005 11:51:07

Hallo Forum!!!

ich habe wieder ein kleines Problem.

Erst mal meiner Code
----
A$ = Space$(20)
i = READSTRING(A$)
ThisWorkbook.Sheets("Dummy").Range("F13").Value = Mid$(A$, 1, i)
----

Mid der Mid$ funktion lese ich meine String Variable A$,
die eine Lange von i zeichen hat.
Jetzt will ich, dass von der länge i immer zwei lezten Zeichen abgezogen werden
mit dem Mid$(A$, 1, i-2) funzt, aber manchmal meldet main Compailer ein Fehler an der Stelle.
í (Zeichenkettelänge) hat leider keine feste Länge aber lezten zwei Zeichen
bezeichnen End of String , was ich in der Darstellung nicht brauche.

oder kann man das aus Excel lösen können in der Zelle "f13" steht z.b folgendes
1,2345## ( statt # habe ich zwei Kästchen)

Wer kann helfen??
Danke im Voraus
Serge

Bild


Betrifft: AW: Ende der String Variable von: Reinhard
Geschrieben am: 02.03.2005 13:14:42

Hi Sergej,
hilft dir vielleicht folgendes:
wert = Application.WorksheetFunction.Clean(wert)
Clean wird in der Excelhilfe (nicht vba-Hilfe) unter "Säubern" erklärt.
Gruß
Reinhard


Bild


Betrifft: AW: Ende der String Variable von: Sergej
Geschrieben am: 02.03.2005 13:31:46

Hallo Reinhard!! leider unter "säubern" ist nichts nuzliches zu finden.
Aber trotzdem erst mal Danke!

in i wird die Länge des empfangenes Strings gespeichert, was dann an die Funktion Mid als String-Länge übergeben wird. So verstehe ich das zumindest.
Übrigens i declariere ich As Integer
i=READSTRING(A$)
k=i-2
Mid$(A$,1,k) bringt auch nichts...habe immer noch diese Fehlermeldung

Vielleicht liegt es an der falschen Schreibweise?? so etwa???
Mid$(A$,1,[i-2])


Bild


Betrifft: AW: Ende der String Variable von: Martin Beck
Geschrieben am: 02.03.2005 13:58:39

Hallo Sergej,

poste mal den kompletten Code.

Werden denn die "seltsamen" Zeichen am Ende mitgezählt? Teste mal in der Tabelle mit

=Länge(A1)

In VBA kannst Du mal versuchen

Left(A$, Len(A$) - 2)

Gruß
Martin Beck


Bild


Betrifft: AW: Ende der String Variable von: Sergej
Geschrieben am: 02.03.2005 14:19:31

Gruß Martin! und Danke

Werden denn die "seltsamen" Zeichen am Ende mitgezählt?

Diese seltsamen Zeichen bezeichnen EOS = End of String!
ich empfange eine koplette Zeichenkette vom Gerät

1,456##
1,3456##
1,23456789## (seltsamenZzeichen bedeuten Ende der Zeichenkette)
und die brauche ich nicht...

A$ As String ist eine String Variable


Bild


Betrifft: AW: Ende der String Variable von: Martin Beck
Geschrieben am: 02.03.2005 14:30:31

Hallo Sergej,

1) Wieso postest Du nicht den Code?

2) Wieso beantwortest Du nicht meine Nachfrage, sondern schreibst nochmal, was Du schon längst erklärt hast?

3) Hast Du meinen letzten Vorschlag ausprobiert? Wenn ja, mit welchem Ergebnis? Wenn nein, warum nicht?

Wenn Du hier Hilfe willst, solltest Du auf Antorten angemessen reagieren.

Gruß
Martin Beck


Bild


Betrifft: AW: Ende der String Variable von: Sergej
Geschrieben am: 02.03.2005 15:37:48

werde Abends erscheinen und beantworte alles


Bild


Betrifft: AW: zu Martin Beck von: Sergej
Geschrieben am: 02.03.2005 21:45:44

lieber Martin es tut mir leid, dass ich nicht gleich geantwortet habe..
ich musste mein Arbeitsplatz verlassen
Ich habe deine Hilfe sehr zu schätzen!

Nun zu meinem Code:
'ich benutze RSAPI.DLL von Herrn B. Kainka zur Ansteuerung eines Gerätes über seriellen Schnittstelle.

Declare

Function READSTRING Lib "RSAPI.DLL" (ByVal $S As String) As Integer
Declare 

Sub READSTRING Lib "RSAPI.DLL"(ByVal $S As String)
'#### mit Hilfe dieser Funktion kann man eine Zeichenkette über serielle Schnittstelle empfangen.########
'Hier folgen noch andere Declarationen 

Sub cmdSenden()
OPENCOM "COM1:9600,N,8,1"
SENDSTRING "kmh,g"+chr$(13)  '##Sende ein Commando, um Daten vom Gerät anzufordern
A$ = Space$(20)             'reserviere 20 bytes für die eingelesene Zeichenkette
i = READSTRING(A$)         'i steht für die Länge der eingelesenen Zeichenkette
RTS 1                     'Ausschalten von RTS-Leitung, ist vom Endgerät abhängig, es kann auch z.B DRS sein
ThisWorkbook.Sheets("Dummy").Range("F13").Value = Mid$(A$, 1, i)
End Sub


Nun wie gesagt
ThisWorkbook.Sheets("Dummy").Range("F13").Value = Mid$(A$, 1, i-2)' bringt mir das was ich will, aber wird nach ein paar mal mit Fehlermeldung zurückgemeldet.

Ich habe an der zelle "F13" die Funktion LÄNGE(F13) ausprobiert und sie zeigt mir das Wert 20...obwohl in der Zelle stand 12.2334# (# steht für das Kästchen)
Nun entspricht dieser Wert genau diesen in A$ reservierten bytes
zur Erinnerung A$ = Space$(20)


Wenn ich der Inhalt der Zelle genau anschaue steht da nämlich folgendes .(das was in "")
"12.345 "nach dem Kästchen noch Leerzeichen und mit dem Komma

habe ich falsch gesagt da steht nähmlich ein Punkt

Dein Vorshlag habe ich mit
Mid$(A$, 1, Len(A$) - 2)
und mit
Left(A$, Len(A$) - 2) ausprobiert leider hat das nicht's gebracht, werde dann trozdem Morgen nochmal versuchen

trozdem vielen Dank für deine Hilfsbereitschaft und aktive Teilnahme!!!


Bild


Betrifft: Formellösung von: Martin Beck
Geschrieben am: 03.03.2005 11:18:07

Hallo Sergej,

String steht in A1. Folgende Formel wandelt den String in eine Zahl um:

=WERT(GLÄTTEN(WECHSELN(SÄUBERN(A1);".";",")))

Gruß
Martin Beck


Bild


Betrifft: AW: Formellösung besten Dank funzt erstmal von: Sergej
Geschrieben am: 03.03.2005 12:07:13

Danke.Danke Danke das funzt prima !!!
nun jetzt suche ich noch eine VBA Lösung


Bild


Betrifft: VBA-Lösung von: Martin Beck
Geschrieben am: 03.03.2005 12:32:58

Hallo Sergej,

in VBA muß man die der Formellösung entsprechenden Worksheetfunctions nehmen.

Versuche mal statt der Zeile

ThisWorkbook.Sheets("Dummy").Range("F13").Value = Mid$(A$, 1, i)

folgenden Code:

With Application.WorksheetFunction
A$ = .Trim(.Clean(A$))
End With
ThisWorkbook.Sheets("Dummy").Range("F13").Value = A$

Gruß
Martin Beck


Bild


Betrifft: AW: VBA-Lösung Danke funzt!!!!!!!!!! von: Sergej
Geschrieben am: 03.03.2005 13:36:27

Martin kannst bitte noch kurz erläutern ,wárum steht vor Trim und Clean einen Punkt????

A$ = .Trim(.Clean(A$))


Bild


Betrifft: AW: VBA-Lösung Danke funzt!!!!!!!!!! von: Martin Beck
Geschrieben am: 03.03.2005 14:02:41

Hallo Sergej,

weil ich schreibfaul bin. ;-) Im Ernst, schau Dir die VBA-Hilfe zu With ... End With an.

Gruß
Martin Beck


Bild


Betrifft: AW: Ende der String Variable von: Reinhard
Geschrieben am: 02.03.2005 14:57:59

Tabellenblattname: Tabelle1
     A   |    B    |   C   | 
1| 1,234 | 1,234 | 1,234 | 
Benutzte Formeln:
B1:  =A1&ZEICHEN(10)&ZEICHEN(13)
C1:  =SÄUBERN(B1)
Gruß
Reinhard


Bild


Betrifft: AW: zu Reinhard von: Sergej
Geschrieben am: 02.03.2005 22:04:41

Erst mal Vielen Dank für deine Antworten !!!!!!!

Zur deine frage bezüglich Funktion READSTRING siehe bitte mein vorlezter Posting
Ich habe mit Säubern schon ausprobiert, an deinem Beischpiel klapts wunderbar...leider habe ich dir falsch gesagt....


A | B | C |
1| 1,234 | 1,234 | 1,234 |

ich habe nähmlich keine Komma sonder ein Punkt...dann meldet
die Funktion Säubern folgendes

12.374 12374 12374 :also Kommazeichen verschwindet dann..

Vielleicht kann mann irgendwie nur die Ziffern auslesen und den Rest nicht???

mein string in der Zelle F13 zieht so aus:
12.4567 ' noch 12 Leerzeichen habe oben erklärt warum so...
Wenn ich eine Zeichenkette mit fester länge hätte, könnte ich einfach
Mid$(A$,1,7) 7 ersten Zeichen aus dem String A4 auslesen

bei mir verschiebt sich die Kommastelle immer nach rechts
1,2347
12,2345
112,2345
Werde morgen noch weiter probieren

Gruß Serge


Bild


Betrifft: Komma Punkt Komma Punkt ? was gilt jetzt? von: Reinhard
Geschrieben am: 03.03.2005 05:54:42

Hi Serge,
wenn du magst, lies dir mal alle deine Postings durch, auch und grad die Antworten.

Du gehst auf die Antworten absolut nicht ein :-(
und dazu kommen noch Denkquizze ob du nun Komma oder Punkt meinst:
(und das nachfolgnde ist aus deinem letzten Posting, also nur aus einem!)

...ich habe nämlich keine Komma sonder ein Punkt...dann meldet
12.374 12374 12374 :also Kommazeichen verschwindet dann..


hast du nun 12.374 oder 12,374?

12.4567 ' noch 12 Leerzeichen habe oben erklärt warum so...
nein, wenn a$ 20 Zeichen lang ist hast du nur noch 11, 12.4567 sind sieben Zeichen plus die beiden steuerzeichen sind neun also haste nur noch 11 leerzeichen, wobei da auch unklar blieb ob die später noch gebraucht werden nach dem Einlesen der Schnittstelle.

bei mir verschiebt sich die Kommastelle immer nach rechts
sagtest du nicht eben du hast keine Kommas sondern Punkte, ?
1,2347
12,2345
112,2345
Werde morgen noch weiter probieren

Schön, ich werde nur noch antworten wenn du mal klarere Fragen stellst.
Und, sei bitte nicht geschockt von dem was du grade liest, es ist konstruktive Kritik, schwr zu verdauen,may be, aber wichtig.
Gruß
Reinhard


Bild


Betrifft: AW: Komma Punkt Komma Punkt ? was gilt jetzt? von: Sergej
Geschrieben am: 03.03.2005 12:30:54

Hello Rainhard!
Eindeutige Antwort Punkt Punkt Punkt...aber der Excel braucht für die weiteren
Calculationen ein Kommazeichen..
Ich habe nähmlich alle deine Vorschlage ausprobiert, ich finde dass,du mit deine Kritik nicht ganz gerecht bist..
vielleicht liegt es an meine Schreibfertigkeiten..bin nähmlich kein Deutscher.

nun zur Sache...
Es ist ein Gerät der keine LCD-Anzeige werwendet. Es werden kleine Module
verwenden die eine Ziffer 8 und ein Punkt unten links darstellen können.
_
/_/
./_/
So etwa... Da kommt dieser Punkt ...

20 byets war eigentlich übertrieben von mir, man braucht maximal 11 ( 9 für 1234.1234 und zwei für EOS-zeichen) Komisch das Mid$(A$,1,i-2) zu gewünschten Ergebnis führt
vo A$ eigentlich 20 Byets enthält und wenn ich von i As Integer 20-2 abziehe komme ich auf 18 , dass heißt noch Leerzeichen am Ende.
Mag sein, dass wenn das erst in Speicher passiert , Leerzeichen werden einfach ignoriert und abgezogen werden nur zwei lezten Steuerzeichen.
Wenn der Inhalt der A$ vollständig in die Zelle kopiert wird , sind es allen 20 reaservierten Byets.


Bild


Betrifft: AW: Komma Punkt Komma Punkt ? was gilt jetzt? von: Reinhard
Geschrieben am: 04.03.2005 23:09:33

Hi Serge,
mit "klarere Fragen" meinte ich absolut nicht dass deine Fragen/Aussagen wegen der deutschen Sprache unklar oder mangelhaft waren.
Es fehlten schtlichtweg wichtige Informationen, du gingst nicht auf die Antworten ein, das hat nix mit Sprache zu tun.
Es hat damit was zu tun, dass du dein Problem in Excel siehst, dazu Hilfe erbittest, aber es den Helfenden sehr schwer machst, indem du Informationen nicht rausrückst, die notwendig sind um das Problem zu lösen. Du bist da absolut kein Einzelfall :-(

Hast es ja gesehen, erst dauerte es viele Postings bis klar wurde was genau du meinst, dann hat Martin das in Minutenschnelle gelöst.
Gleich das Anfangsposting mit diesen Informationen versehen, wir hätten uns viele Postings erspart.
Exakt das meine ich mit "klarere Fragen".
Gruß
Reinhard



Bild


Betrifft: AW: Ende der String Variable von: Reinhard
Geschrieben am: 02.03.2005 14:16:58

Hi Sergej,
wenn du da in Excel im Text von A1 hinten 2 "Kästchen " an dem String siehst, dann macht die Funktion
=SÄUBERN(A1) das was du willst, diese Kästchen entfernen.
Und mein vba-Code entspricht dem =SÄUBERN(A1) in Excel.
Ansonsten, was soll dieses Readstring denn sein, (gibts in Exel2000 nicht)?

2Beispiele wenn dir ".clean" warum auch immer nicht passt:

Sub tt()
A$ = Space$(20)
' i = READSTRING(A$) was soll denn READSTRING sein?
ThisWorkbook.Sheets("Dummy").Range("F13").Value = Mid$(A$, 1, Len(A$) - 2)
End Sub


Sub tt2()
A$ = Space$(20)
' i = READSTRING(A$) was soll denn READSTRING sein?
ThisWorkbook.Sheets("Dummy").Range("F13").Value = Left(A$, Len(A$) - 2)
End Sub

Gruß
Reinhard



 Bild

Beiträge aus den Excel-Beispielen zum Thema "Ende der String Variable"