小编Hei*_*nzi的帖子

VBA内置文件操作使用哪种字符串编码?

例:

Open "C:\...\someFile.txt" For Output As #1
Print #1, someString
Close #1
Run Code Online (Sandbox Code Playgroud)

如果someString包含非ASCII字符,它们如何编码?(UTF-8,Latin-1,一些代码页取决于Windows语言环境,...)

在我的系统上,上面的代码似乎使用的是Windows-1252,但由于Open语句的文档和Print#语句的文档都没有提到字符串编码,我无法确定这是否是某些内置默认值或某些系统设置,我正在寻找一个明确的答案.


注意:感谢大家建议如何使用特定编码创建文件的替代方法(ADODB.Stream,Scripting.FileSystemObject等) - 感谢他们.然而,这个问题是关于理解遗留代码的确切行为,所以我只对上面引用的代码的行为感兴趣.

ms-access vba internationalization codepages

3
推荐指数
1
解决办法
1213
查看次数

如何订购IEnumerable <T>以使特殊项目始终位于底部?

我有一个IEnumerable<string>被传递给我,其中包含以下内容:

  • 生命值
  • 教规
  • 利盟
  • 三星
  • 其他

现在我想要实现的是按字母顺序排序项目,但我想保持other项目最后.我已经开始使用了OrderBy(i => i)

列出如下项目:

  • 教规
  • 生命值
  • 利盟
  • 其他
  • 三星

我想要的结果是

  • 教规
  • 生命值
  • 利盟
  • 三星
  • 其他

我尝试过使用,.OrderBy(i => i != "Other").ThenBy(i => i)但这会把Other项目放在顶部.

有人可以告诉我如何实现这一目标.

c#

3
推荐指数
1
解决办法
122
查看次数

VB.NET XML文字中的换行符

显然,VB的XML文字中的CR-LF组合被静默地转换为LF.

请考虑以下最小示例:

Module Module1
    Sub Main()
        Dim x As XElement = <xml>1
2</xml>

        ' Print Bytes
        Console.WriteLine(String.Join("-", x.Value.Select(Function(c) AscW(c).ToString("X2"))))
    End Sub
End Module
Run Code Online (Sandbox Code Playgroud)

使用Visual Studio 2017(Framework 4.5.2)编译,这会产生

31-0A-32
Run Code Online (Sandbox Code Playgroud)

而不是

31-0D-0A-32
Run Code Online (Sandbox Code Playgroud)

正如我所料.我用二进制编辑器检查了源文件,它肯定包含xml文字中1到2之间的CR-LF(0D-0A).

这是官方记录的行为还是我的编译器的一些实现细节,我不能依赖它?如果是前者,它在哪里记录?

xml vb.net

3
推荐指数
1
解决办法
78
查看次数

我可以通过在C#中串联字符串和整数常量来创建字符串常量吗?

我知道我可以通过串联其他常量字符串来创建新的常量字符串:

const string a = "A";
const string ab = a + "B";
Run Code Online (Sandbox Code Playgroud)

是否可以基于常量int创建常量字符串?例如,以下内容不会编译:

const int Dpi = 300;
const string DeviceInfo = "<DeviceInfo><Dpi>" + Dpi + "</Dpi></DeviceInfo>";
Run Code Online (Sandbox Code Playgroud)

分配给MyClass.DeviceInfo的表达式必须是常量。

我知道我可以解决这个问题

  1. 制作Dpi一个字符串而不是一个int(并int.Parse在需要int值时添加它),
  2. 添加第二个字符串常量DpiString(因此违反了DRY),或
  3. 制作DeviceInfo一个static readonly字段而不是一个const字段。

我将选择选项3,但是出于好奇,我想知道是否还有其他选项我错过了...

c# const language-lawyer

3
推荐指数
1
解决办法
295
查看次数

.Net是否有常见数字的内置常量,如百万,十亿等?

.Net是否有常见数字的内置常量,如百万,十亿等?

编辑:正如所建议的那样,这是出于可读性的原因,而不是写1000000或1000000000.我知道我可以创建自己的,只是想在我这样做之前检查它们是否已经存在.

.net constants literals

2
推荐指数
5
解决办法
491
查看次数

Excel Jet OLE DB:插入日期时间值

OLEDB 可用于读取和写入 Excel 工作表。考虑以下代码示例:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\my\\excel\\file.xls;Extended Properties='Excel 8.0;HDR=Yes'")) {
    conn.Open();
    OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] datetime)", conn);
    cmd.ExecuteNonQuery();
    cmd = new OleDbCommand("INSERT INTO Sheet1 VALUES (@mydate)", conn);
    cmd.Parameters.AddWithValue("@mydate", DateTime.Now.Date);
    cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

这工作得很好。插入数字、文本等也效果很好。但是,插入带有时间分量的值会失败:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\my\\excel\\file.xls;Extended Properties='Excel 8.0;HDR=Yes'")) {
    conn.Open();
    OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] datetime)", conn);
    cmd.ExecuteNonQuery();
    cmd = new OleDbCommand("INSERT INTO Sheet1 VALUES (@mydate)", conn);
    cmd.Parameters.AddWithValue("@mydate", DateTime.Now); // <-- note the difference …
Run Code Online (Sandbox Code Playgroud)

.net c# oledb excel jet

2
推荐指数
1
解决办法
6329
查看次数

转换为特殊字符(例如从"&aelig;"到"æ")

我想保存名称中包含丹麦字符的文件,例如"Helloæ".

保存文件名的字符串具有以下值: Hello&aelig;

如何让它转换&aelig;æ?这个问题不只是关于"æ"字符,而是关于所有其他可能的字母.

c#

2
推荐指数
1
解决办法
1149
查看次数

NOLOCK仍然不需要WITH关键字吗?

我们正在从SQL Server 2008迁移到SQL Server 2014.我搜索了Microsoft文档,但我可以发誓这个

select * from table (nolock)
Run Code Online (Sandbox Code Playgroud)

将是一个无效的语法,并将WITH被要求.

但是,我似乎无法在文档中找到它并且我在2014年的实例上测试它没有问题.

忽略整个"NOLOCKs很糟糕"的事情,我完全错误地记住了这个或者语法上的这种改变被删除了吗?

sql-server

2
推荐指数
1
解决办法
177
查看次数

在公共字段上加入C#中两个列表的最有效方法是什么?

你能告诉我哪一个列表连接方法更有效,为什么?还是性能相同?有没有其他方法来处理这种情况(基于字段属性加入2个列表)?

我的代码:

public List<CombinedDatabaseStructure> Combine1(List<DatabaseStructure1> _Data1, List<DatabaseStructure2> _Data2)
{
    List<CombinedDatabaseStructure> combinedAll = new List<CombinedDatabaseStructure>();
    foreach (var row1 in _Data1)
    {
        foreach (var row2 in _Data2)
        {
            CombinedDatabaseStructure combined = new CombinedDatabaseStructure();
            if (row1.ID == row2.ID)
            {
                combined.DatabaseStructure1 = row1;
                combined.DatabaseStructure2 = row2;
                combinedAll.Add(combined);
            }
        }
    }

    return combinedAll;
}
Run Code Online (Sandbox Code Playgroud)

代码2:

public List<CombinedDatabaseStructure> Combine2(List<DatabaseStructure1> _Data1, List<DatabaseStructure2> _Data2)
{
    var joined = from item1 in _Data1.AsEnumerable() 
                 join item2 in _Data2.AsEnumerable() on item1.ID equals item2.ID
                 select new CombinedDatabaseStructure (item1,item2);

    return  joined.ToList<CombinedDatabaseStructure>();
}
Run Code Online (Sandbox Code Playgroud)

c# linq

2
推荐指数
1
解决办法
488
查看次数

如何再次启动Visual Studio 2019输出窗口“默认可见”?

前一段时间,Visual Studio 2019告诉我,``输出''窗口导致Visual Studio的启动延迟为X秒,并让我在启动时隐藏了该窗口。

我接受了这个提议,现在,过了一段时间,我发现必须在每个Visual Studio会话中一次重新固定“输出”窗口是一件令人讨厌的事情,并且我希望将事情恢复到以前的样子。

我浏览了Visual Studio选项(特别是“环境” /“启动”和“环境” /“选项卡和Windows”),但没有找到撤消该更改的选项。我错过了什么?


我知道我可以将Visual Studio重置为默认设置,但是我想避免这种情况,因为那样我会丢失所有的自定义设置。(除非给出答案也证明没有其他选择,否则将不会提供任何暗示建议。)

我也知道我可以固定输出窗口,然后将布局“保存”为自定义布局。我不需要,我想修改启动时加载的“默认”布局。

visual-studio-2019

2
推荐指数
1
解决办法
101
查看次数