Varför översätta?
Sätt upp kraven på vad som skall utföras och utgå ifrån dom tycker jag.
Hallå har suttit ett bra tag med detta nu och snurrat till det rejält. Får det inte att stämma.
Oginalet som ska översättas ser ut så här:
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
Efter många försök har jag inte fått till det :(
Min snurriga, virriga kod just nu (jag vet att den inte är snygg :r )
namespace Lab
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string s = code128C(txtIn.Text);
txtUt.Text = s.ToString();
}
private string code128C(string txt)
{
string txtRetur = "";
string start = new string((char)0137, 1);
// 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 ;
for (int i = 0; i < k; i++)
{
string s = Mid(txt, i,1);
int myChar = Convert.ToInt32(s);
MessageBox.Show(myChar.ToString(), "s", MessageBoxButtons.OK);
if (myChar == 127)
{
string str = new string((char)0139, 1);
txtRetur += str;
}
if (myChar == 32)
{
string str = new string((char)0192, 1);
txtRetur += str;
}
else
{
string b = Mid(txt, 0, 2);
int myChar1 = Convert.ToInt32(b);
myChar1 = myChar1 + 32;
string str = new string((char)myChar1, 1);
txtRetur = txtRetur + str;
}
//txt = txt.Remove(0, 2);
}
txtRetur = start + txtRetur;
int sum = Code128CChecksum(txt);
if (sum == 0)
{
sum = 113;
}
else
{
sum = sum + 32;
}
string strCheck = new string((char)sum, 1);
txtRetur = txtRetur + strCheck;
return txtRetur;
}
private int Code128CChecksum(string chk)
{
int i = 1;
int sum = 105; //Summan 105 är startkoden för 128C
int k = chk.Length;
for (int a = 1; a <= k; a++)
{
string s = chk.Substring(0, 2);
int myChar = Convert.ToInt32(s);
sum = sum + (myChar * i);
i++;
}
sum = (sum % 103);
return sum;
}
private string MakeCode128C(string txt)
{
int start = 105;
// string startChar = new string((char)0137, 1);
string returnText = new string((char)0137, 1); ;
//Kontrollera att strängen är jämt delbar annars lägg till 0 i början av strängen
if (txt.Length % 2 != 0)
{
txt = "0" + txt;
}
//Antal par siffror
int par = txt.Length / 2;
int k = 1;
int i = 1;
foreach(char c in txt)
{
int iAsciiValue = Convert.ToInt16(c);
// int iAsciiValue = Convert.ToInt32(((int)c).ToString());
if(iAsciiValue == 127)
{
string s = new string((char)0139, 1);
returnText = returnText + s;
}
if (iAsciiValue == 32)
{
string s = new string((char)0192, 1);
returnText = returnText + s;
}
else
{
int myChar = Convert.ToInt16(Mid(txt, i, 2))+32;
string str = new string((char)myChar, 1);
returnText = returnText + str;
}
start = start + (Convert.ToInt32(Mid(txt, i, 2)) * k);
k++;
i++;
}
//Kontroll tecken
start = start % 103;
if (start == 0)
{
start = 113;
}
// Lägg till Kontrolltecken i strängen
int controlChar = start + 32;
string kontrolltkn = new string((char)controlChar, 1);
returnText = returnText + kontrolltkn;
// Konvertera space tecken
string strRetur = "";
i = 1;
foreach (char c in returnText)
{
int iAsciiValue = Convert.ToInt32(c);
if (iAsciiValue == 32)
{
string s = new string((char)0192, 1);
strRetur = strRetur + s;
}
else
{
strRetur = strRetur + Mid(returnText, i, 1);
}
i++;
}
returnText = strRetur;
return returnText;
}
private int ChecksumC(string chk)
{
int i = 1;
int sum = 105; //Summan 104 är startkoden för 128B
foreach (char c in chk)
{
int tal = (int)c - 32;
sum = sum + (tal * i);
i++;
}
sum = sum % 103;
return sum;
}
private 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 som kanske redan gjort detta eller kan hjälpa mig på traven. Trött i knoppen och blir avbruten hela tiden. Det hela handlar alltså om teckenkonvertering och checksumma för streckkoder.
Tacksam för all hjälp.
