有一个txt文件,里面存储这多行的数字,比如:
000000000000111010010101010000000000000000
111010101000111100000000000000000110010000
000010101010101010010000000000000000000000
100001010100101000000000110000000010001001
110010101010000000000000000000000000000000
按64个字符算成一组, 输出每组中字符为1的下标。 这个下标是每组内的下标,即0-63且衔接也已经完成,现在我要输出的格式中加入判断,就是碰到每组第一个1的时候输出start,最后一个1的时候输出end,如下所示:
.......
M[8] start X[8] P[8]   
M[11] P[8] X[11] P[11]   
M[12] P[11] X[12] P[12]
......
M[45] P[40] X[45] end
这样要这么解决?

解决方案 »

  1.   

    var lines = File.ReadAllLines(@"E:\我的项目文档\c.txt");
    var sw = new StreamWriter(@"E:\我的项目文档\De.txt", false);var blen = 64;
    foreach (var item in lines)
    {
        string[] blks;
        var count = item.Length / blen;
        var rem = item.Length % blen;
        if (rem > 0)
        {
            blks = new string[count + 1];
            blks[count] = item.Substring(blen * count, rem);
        }
        else
        {
            blks = new string[count];
        }
        for (int i = 0; i < count; i++)
        {
            blks[i] = item.Substring(blen * i, blen);
        }    for (int i = 0; i < blks.Length; i++)
        {
            var str = blks[i];
            var idxs = new List<int>(blen);
            var index = -1;
            while ((index = item.IndexOf('1', index + 1)) >= 0)
            {
                idxs.Add(index);
            }        var istr = i.ToString();        var sidxstr = idxs[0].ToString();
            sw.WriteLine(string.Concat("M", istr, "[", sidxstr, "] O[", istr, "] X[", sidxstr, "] P", istr, "[", sidxstr, "]"));        var lidx = idxs.Count - 1;
            for (int j = 1; j < lidx; j++)
            {
                var idxstr = idxs[j].ToString();
                sw.WriteLine(string.Concat("M", istr, "[", idxstr, "] P", istr, "[", sidxstr, "] X[", idxstr, "] P", istr, "[", idxstr, "]"));
                sidxstr = idxstr;
            }        var eidxstr = idxs[lidx].ToString();
            sw.WriteLine(string.Concat("M", istr, "[", eidxstr, "] P", istr, "[", sidxstr, "] X[", eidxstr, "] I[", istr, "]"));        sw.Flush();
        }
    }
      

  2.   

    谢谢,还是那个问题就是上次在result[j][i] = arr[j]这里提示索引超出数组,我又试了几次,还是那种情况!
      

  3.   

    谢谢,还是那个问题就是上次在result[j][i] = arr[j]这里提示索引超出数组,我又试了几次,还是那种情况!
      

  4.   

    这个判断完以后出来的数据有点怪,是这样的:
    .............
    M0[123] P0[94] X[123] P0[123]
    M0[124] P0[123] X[124] P0[124]
    M0[125] P0[124] X[125] P0[125]
    M0[163] P0[125] X[163] P0[163]
    M0[168] P0[163] X[168] P0[168]
    M0[169] P0[168] X[169] P0[169]
    M0[170] P0[169] X[170] P0[170]
    M0[171] P0[170] X[171] P0[171]
    M0[217] P0[171] X[217] P0[217]
    M0[218] P0[217] X[218] P0[218]
    M0[219] P0[218] X[219] P0[219]
    M0[228] P0[219] X[228] P0[228]
    M0[229] P0[228] X[229] P0[229]
    M0[230] P0[229] X[230] P0[230]
    M0[270] P0[230] X[270] P0[270]
    M0[271] P0[270] X[271] P0[271]
    M0[272] P0[271] X[272] P0[272]
    M0[273] P0[272] X[273] P0[273]
    M0[297] P0[273] X[297] P0[297]
    M0[298] P0[297] X[298] P0[298]
    M0[299] P0[298] X[299] P0[299]
    M0[300] P0[299] X[300] P0[300]
    M0[332] P0[300] X[332] P0[332]
    M0[334] P0[332] X[334] P0[334]
    ............
    以64为一组,不会超过64,可是生成出来变成这样了!!!