![]() |
Delphi-Version: 5
Excel - kyrillischen Text auswerten
Hallo,
hier das Problem Ich habe in einer Excel-Zelle den Monat in kyrillichen Buchstaben und brauche die Monatszahl. Wie kann ich den Monat ermitteln? In der Excel-Zelle steht: '№ 8888 от 31 октября 2012 г.' In dem WideString steht: '? 8888 ?? 31 ??????? 2012 ?.' var ws:widestring; whv:variant; .... whv:=Sheet.Cells[13,2].value2; Sheet.Cells[13,40].value2:=whv; ws:=vartowidestr(whv); Ich nutze dafür Delphi6PE! Vielen dank im Voraus Gerd |
AW: Excel - kyrillischen Text auswerten
Zitat:
Der in der IDE von Delphi 5 integrierte Debugger ist natürlich nicht unicode-fähig und wandelt Widestrings vor der Anzeige ist Ansistrings um. |
AW: Excel - kyrillischen Text auswerten
Hallo SX2008,
ich habe die falsche Version angegeben - es ist Delphi6PE. Wandelt es nur die Anzeige? Nur wie komme ich an was auswertbarem, sowas wie der Ordinatszahl? Ich brauche letztlich nicht die Anzeige, sondern die entsprechende Monatsnummer. Ich habe auch schon die Anzahl der '?' geprüft, also sowas wie die Länge des Monatsnamens, aber da haben z.B. Januar, April und November jeweils 6 Stellen. Gerd |
AW: Excel - kyrillischen Text auswerten
Wobei du das ja auch noch ändern könntest (bearbeiten > erweitert) und/oder du gibst es gleich in deinem Profil an.
Aber egal ob D5 oder D6, beide Belphis können kein Unicode (in der RTL, VCL, abgesehn won ein paar Funktionen, wo WideString verwendet wird, anstatt des AnsiString/String) Du kannst dich nur mit CodePages abkämpfen. oder Programminterne ebenfalls mit CodePages arbeiten (mit einer CodePage, welche die entsprechenden kyrillischen Zeichen enthält), bzw. den WideString verwenden und für die Anzeige z.B. sowas wie die TNT Unicode Controls nutzen. |
AW: Excel - kyrillischen Text auswerten
Hallo sx2008 und Himitsu,
ihr habt mir beide weitergeholfen. sx2008 damit, dass das, was man sieht, nicht alles ist. Ich war da nur gar nicht drauf gekommen, weil im Fenster 'Watch List' der angezeigte Inhalt von whv und ws so unterschiedlich war. Und Himitsu mit seiner Funktion CopyW. Ich werde dann noch mal den fertigen Teil mitteilen. Gerd |
AW: Excel - kyrillischen Text auswerten
So, hier nun mal, wie ich das auswerte:
Ich nehme die ersten 3 Stellen, Count braucht man als Parameter da eigentlich nicht, aber ich will noch anderes Zeugs auswerten. Ich baue aus den kyrillischen Zeichen eine Zeichenkette im 'normalen' ASCII-Zeichensatz und diese kann ich dann vergleichen. Also es wird nichts übersetzt. Die ersten drei Stellen sind eindeutig, wenn man weiß, dass da nur eine Monatsangabe kommt. Function RuMoNameZuMoNr(S: WideString ; Count: LongInt): integer; type t_ma=record case byte of 0:(b:array[0..10] of byte); 1:(c:array[0..10] of char); end; var t:t_ma; n:byte; mon:integer; // = Monatszahl oder <=0 bei Fehler mons:string; Begin fillchar(t,sizeof(t),$0); Count:=3; // ich werte die ersten 3 Buchstaben aus If Count < 0 Then Count := 0; If Count > Length(S) Then Count := Length(S); If Count > 0 Then Begin Move(S[1], t.b[0], Count shl 1); End; mon:=0; mons:=''; for n:=0 to pred(count) do begin if t.b[n*2+1]<>4 then dec(mon); // 04 - kyrillischer Zeichensatz, wenn nicht, dann wird 'mon' negativ end; if mon=0 then begin for n:=0 to pred(count) do begin if t.b[n*2]<$30 then t.b[n*2]:=t.b[n*2] + $20; // alles in Kleinbuchstaben wandeln, damit egal wie es kommt mons:=mons+t.c[n*2]; end; if mons='O=2' then mon:=1; if mons='D52' then mon:=2; if mons='<0@' then mon:=3; if mons='0?@' then mon:=4; if mons='<0O' then mon:=5; if mons='8N=' then mon:=6; if mons='8N;' then mon:=7; if mons='023' then mon:=8; if mons='A5=' then mon:=9; if mons='>:B' then mon:=10; if mons='=>O' then mon:=11; if mons='45:' then mon:=12; end; RuMoNameZuMoNr:=mon; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz