Emmablakes Ответов: 5

Как разбить 18-значное число на части


я хотел бы разбить 18-значное число на части и не знаю, как это сделать.

например
num=123456789123654258 / / 18-значный номер

num состоит из 5 совместных частей а именно

braCode=123, //1-й 3-значный
cusCode=4567891, / / от 4-й до 10-й цифры
curCode=23, / / 11-я и 12-я цифры
ledcode=6542, //13-16-я цифра
подкод=58, / / 17-й и 18-й.

как получить bracode,cuscode,curcode, ledcode и subcode из num.

Что я уже пробовал:

я могу получить следующее
bracode = числ.Подстрока(0,3)
подкод= числ.Подстрока(16);
curcode= ?
ledcode= ?
cuscode= ?

5 Ответов

Рейтинг:
2

Matt T Heffron

Первый вопрос: "дано ли вам 18-значное число в качестве типа long, или как string?"
Если как long, то решение 3 Нипурбы Конара находится на правильном пути, но его можно упростить:

long subCode = Math.DivRem(num, 100, out num);
long ledcode = Math.DivRem(num, 10000, out num);
long curCode = Math.DivRem(num, 100, out num);
long cusCode = Math.DivRem(num, 10000000, out num);
long braCode = num;

Если у вас есть string, затем А Regex это довольно прямолинейно:
class Program
{
  static readonly Regex TakeApart = new Regex("^(...)(.......)(..)(....)(..)$", RegexOptions.Compiled);
  static void Main(string[] args)
  {
    string num = "123456789123654258";
    Match m = TakeApart.Match(num);
    if (!m.Success)
    {
      // something went wrong!
    }
    string braCode = m.Groups[1].Value; //1st 3 digits
    string cusCode = m.Groups[2].Value; //from 4th to 10th digit
    string curCode = m.Groups[3].Value; //11th and 12th digit
    string ledcode = m.Groups[4].Value; //13th to 16th digit
    string subCode = m.Groups[5].Value; // 17th and 18th.
    // proceed ....
  }
}

Это дает 5 строк в качестве выходных данных.


Leo Chapiro

+5

Рейтинг:
2

Leo Chapiro

Попробуйте что-нибудь подобное:

try
            {
                long nNum = 123456789123654258;
                string sNum = nNum.ToString();

                int braCode = Int32.Parse(sNum.Substring(0, 3));    //123 //from 4th to 10th digit
                int cusCode = Int32.Parse(sNum.Substring(3, 7));    //4567891, from 4th to 10th digit
                int curCode = Int32.Parse(sNum.Substring(10, 2));   //23, //11th and 12th digit
                int ledcode = Int32.Parse(sNum.Substring(12, 4));   //6542, //13th to 16th digit
                int subCode = Int32.Parse(sNum.Substring(16, 2));   //58, // 17th and 18th.
            }
           catch(Exception ex)
            {
               // do smth!
            }


Karthik_Mahalingam

5

Leo Chapiro

Спасибо! :)

Рейтинг:
1

johannesnestler

Вы находитесь на правильном пути с подстрокой-как в вашем первом примере, только с различными смещениями подстроки(0, 3), подстроки(3, 7), подстроки(10, 2) и так далее.


Рейтинг:
0

Nipurba Konar

длинное число=123456789123654258;
int subcode = num%100;
num = математика.Этаж (num / 100);
int ledcode = num%10000;
num = математика.Этаж (num / 10000);
int curCode = num%100;
num = математика.Этаж (num / 100);
int cusCode = num%10000000;
int braCode = математика.Этаж (num/10000000)


Рейтинг:
0

Patrice T

Ваш вопрос непоследователен:
Здесь у вас есть цифры:

num=123456789123654258 //18 digit number
...
braCode=123, //1st 3 digit
cusCode=4567891, //from 4th to 10th digit
curCode=23, //11th and 12th digit
ledcode=6542, //13th to 16th digit
subCode=58, // 17th and 18th.

а вот и струны:
bracode = num.Substring(0,3)
subCode= num.Substring(16);

и вы не претендуете на какую-либо проблему, что удивительно с C# !
В 8 строках кода только 1 может компилироваться только из-за окончаний.
Если:
bracode = num.Substring(0,3)

работает, вы знаете решение, следующее будет
cusCode = num.Substring(3,7)

В противном случае проще всего разбить число, начиная с наименее значащих цифр
subcode= num % 100
tmp= num / 100
ledcode= tmp % 10000
tmp= tmp / 10000
...