AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Excel - kyrillischen Text auswerten

Ein Thema von Gerd L · begonnen am 7. Nov 2012 · letzter Beitrag vom 7. Nov 2012
Antwort Antwort
Gerd L

Registriert seit: 7. Mär 2007
Ort: ERZ
7 Beiträge
 
Delphi 6 Personal
 
#1

Excel - kyrillischen Text auswerten

  Alt 7. Nov 2012, 08:59
Delphi-Version: 5
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

Geändert von Gerd L ( 7. Nov 2012 um 11:08 Uhr) Grund: Habe die Frage versehentlich überschrieben
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Excel - kyrillischen Text auswerten

  Alt 7. Nov 2012, 09:12
Als Ergebnis in WS steht:
'? 8888 ?? 31 ??????? 2012 ?.'
Wie kommst du darauf bzw. wo liest du diesen Text?
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.
  Mit Zitat antworten Zitat
Gerd L

Registriert seit: 7. Mär 2007
Ort: ERZ
7 Beiträge
 
Delphi 6 Personal
 
#3

AW: Excel - kyrillischen Text auswerten

  Alt 7. Nov 2012, 09:37
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.004 Beiträge
 
Delphi 12 Athens
 
#4

AW: Excel - kyrillischen Text auswerten

  Alt 7. Nov 2012, 10:15
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Nov 2012 um 10:18 Uhr)
  Mit Zitat antworten Zitat
Gerd L

Registriert seit: 7. Mär 2007
Ort: ERZ
7 Beiträge
 
Delphi 6 Personal
 
#5

AW: Excel - kyrillischen Text auswerten

  Alt 7. Nov 2012, 10:58
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
  Mit Zitat antworten Zitat
Gerd L

Registriert seit: 7. Mär 2007
Ort: ERZ
7 Beiträge
 
Delphi 6 Personal
 
#6

AW: Excel - kyrillischen Text auswerten

  Alt 7. Nov 2012, 15:06
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
0b:array[0..10] of byte);
1c: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;
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz