Hej har ett problem med att översätta detta till C# och undrar om någon kan hjälpa till. Så här har jag försökt lösa det. Men det fungerar bara till en viss gräns. Får jag in för mågna tecken blir strängen fel. Jag är inte helt säker på att jag förstår problemet, men det finns ju typsnitt för coder128 man kan ladda hem gratis, varför inte bara ändra typsnittet ? Jadu Martin... Visst finns det en gratisvariant på Code128 typsnittet men bara i subset B.Code128 Subset C översättning från VB
Jag har löst det "nästan" men får fel i vissa fall och har inte lyckats klura ut det hela.
<code>
Make_Subset_C()
'*** Start C has value of 105
Total% = 105
'*** Add Start Character to output
BarCodeData.Text = Chr$(137)
'*** Make sure there are an even number of digits
If Len(UserText.Text) Mod 2 <> 0 Then UserText.Text = "0" + UserText.Text
'*** Initialize k to keep track of position value
k% = 1
'*** Loop through the data & read each pair of characters
For I% = 1 To Len(UserText.Text)
'*** Need to remap this character if it appears
If Asc(Mid$(UserText.Text, I%, 1)) = 127 Then
BarCodeData.Text = BarCodeData.Text + Chr$(139)
End If
'*** Need to remap this character if it appears
If Asc(Mid$(UserText.Text, I%, 1)) = 32 Then
BarCodeData.Text = BarCodeData.Text + Chr$(192)
Else
BarCodeData.Text = BarCodeData.Text + Chr$(Val(Mid$(UserText.Text,_ I%, 2)) + 32)
End If
'*** Multiply position * value and add to existing total
Total% = Total% + (Val(Mid$(UserText.Text, I%, 2)) * k%)
k% = k% + 1
I% = I% + 1
Next I%
'*** get the MOD 103 check digit value
Total% = Total% Mod 103
'*** remap character if it appears
If Total% = 0 Then Total% = 113
'*** Add check digit to output
BarCodeData.Text = BarCodeData.Text + Chr$(Total% + 32)
'*** Add stop character to output
BarCodeData.Text = BarCodeData.Text + Chr$(138)
'*** Loop through code and remap space characters
Temp$ = ""
For I% = 1 To Len(BarCodeData.Text)
If Asc(Mid$(BarCodeData.Text, I%, 1)) = 32 Then
Temp$ = Temp$ + Chr$(192)
Else
Temp$ = Temp$ + Mid$(BarCodeData.Text, I%, 1)
End If
Next I%
BarCodeData.Text = Temp$
end sub
</code>Sv: Code128 Subset C översättning från VB
public static string code128C(string txt)
{
string txtRetur = "";
string start = "‰";
string strStop = "Š";
// Fixa till längden på inkommande sträng
if (txt.Length % 2 != 0)
{
txt = "0" + txt;
}
string tmpText = txt;
//Längen på strängen parvis
int k = (txt.Length / 2);
for (int i = 1; i <= k; i++)
{
string s = Mid(txt, 0, 2);
int myChar = Convert.ToInt32(s) + 32;
if (myChar == 32)
{
string str = new string((char)0192, 1);
txtRetur = txtRetur + str;
}
else if (myChar == 127)
{
string str = new string((char)0139, 1);
txtRetur = txtRetur + str;
}
else if (myChar > 127)
{
string sTemp = "1" + s;
int tmpChar = Convert.ToInt32(sTemp);
string str = new string((char)tmpChar, 1);
txtRetur = txtRetur + str;
}
else
{
string str = new string((char)myChar, 1);
txtRetur = txtRetur + str;
}
txt = txt.Remove(0, 2);
}
int sum = Code128CChecksum(tmpText);
txtRetur = start + txtRetur;
if (sum == 0)
{
sum = 113;
}
else if (sum > 94)
{
sum = sum + 100;
}
else
{
sum = sum + 32;
}
//Kolla storlek på kontrolltecken innan.
string strCheck = new string((char)sum, 1);
txtRetur = txtRetur + strCheck + strStop;
return txtRetur;
}
private static int Code128CChecksum(string chk)
{
int i = 1;
int sum = 105; //Summan 105 är startkoden för 128C
int k = chk.Length / 2;
string tmp = chk;
for (int a = 1; a <= k; a++)
{
string s = tmp.Substring(0, 2);
int myChar = Convert.ToInt32(s);
sum = sum + (myChar * i);
i++;
tmp = tmp.Remove(0, 2);
}
sum = (sum % 103);
return sum;
}
private static string Mid(string param, int startIndex, int length)
{
//start at the specified index in the string ang get N number of
//characters depending on the lenght and assign it to a variable
string result = param.Substring(startIndex, length);
//return the result of the operation
return result;
}
Någon med någon bra idé och lösning?
Sv:Code128 Subset C översättning från VB
Om du har en sträng du vill ha ut som barcode, så funkar det utmärkt med att använda det typsnittet.
I vissa fall får man lägga ett '*'-tecken före för att det ska funka.Sv: Code128 Subset C översättning från VB
Ett teckensnitt medföljer och visst är det så att Code39 streckkoden startar med en asterisk och slutar med den samma.
Men i detta fall är det Code128 och subset C som ska användas för att att platsen som det ska skrivas på är begränsad. Code128C är komprimerad. Hade det varit 128B som är förvisso mer komprimerad än Code39 så hade saken varit "biff". Men nu är det det 128C i som gäller för att få plats med koden.
Code128 C till just det här typsnittet ska räknas ut på det sätt som VB koden beskriver. Fick med ett program från leverantören så jag kan prova vad som händer men ingen kod för C# och det är det som ska användas i det jag håller på med.
Jag har alltså försökt översätta och fått det att fungera "nästan".
Var hittar du 128 typsnittet gratis?Sv:Code128 Subset C översättning från VB
*puffar tråden lite*