RSS

カテゴリー別アーカイブ: VB

Visual Basic

Google Drive API v2 から v3 への移行でつまづいたいくつかの点

Google Drive API .NET を使って v2 から v3 へアプリケーションを移行するのにつまづいた点をまとめました。

1 フィールド(プロパティ)の名前が変わった

File オブジェクトのフィールド(プロパティ)が変わっています。一番影響を受けるのが、ファイルの名前で v2 では Title プロパティで取得していたのが v3 からは Name プロパティになります。ファイルの日時も …Date から …Time に変わりました。他にもあるかしれませんが、よく使いそうなところとしてはこんなところでしょうか。

2 ファイル情報(フィールド)の取得方法

v2 ではファイル情報は全部返してきたかと思いますが、v3 では取得するものを指定しないと Nothing (C# では null) が返されます。取得項目は GetRequest の Fields プロパティにカンマ区切りテキストで指定します。このフィールド名は大文字小文字が正確でないとエラーになります。

Public Function GetFile(ByVal id As String) As Data.File
  Dim request As FilesResource.GetRequest = service.Files.Get(id)
  request.Fields = "name,id,parents,size,description,modifiedTime,mimeType"
  Dim File As Data.File = request.Execute()
  Return file
End Function

3 ファイルの場所がトップレベル(Root)かの判別

v2 では Parents コレクションの要素 (ParentRefernce 型) に IsRoot プロパティというのがあって簡単に判別できたのですが、v3 ではParents コレクションの要素は String 型(フォルダのId)に変わっています。
この Id を使って File オブジェクトを取得するとファイルの場所がトップレベル(Root)でも有効な Id が取得されます。この Id から名前 (Name プロパティ) を取得すると “マイドライブ” (日本語版の場合)となります。
したがって、ファイルの場所がトップレベルかどうかは、親のフォルダの Id を使って親の名前を取得し、それが”マイドライブ”であるかを確認するしかないようです。(どこかに IsRoot みたいのがあるかもしれませんが)

とりあえず、つまづいたところは現在のところ以上です。

 
コメントする

投稿者: : 2016/06/16 投稿先 Google, VB

 

VB.NET の文字型リテラルの表現方法

C# では文字型リテラルは ‘X’ などとシングルクォートを使って表現されますが、VB.NET ではそういう書き方はできません。VB.NET では、このような場合、

Dim ch As Char = “X”c

などと c を付けて記述します。これはショート型整数を 10S などと書くのと同じです。

Chr関数を使って

Dim ch As Char = Chr(“X”)

と書くこともできます。

 
コメントする

投稿者: : 2015/08/16 投稿先 VB

 

System.Diagnostics.Debug のよく使うメソッドの使い方

.NET Framework の System.Diagnostics.Debug の各メソッドはデバッグに役に立ちます。

Assert メソッドは条件が成り立たない場合、メッセージボックスを表示します。

Print, Write, WriteLine などはVisual Studio の出力ウィンドウにメッセージを表示します。

WriteLineIf メソッドなどは条件が成り立ったときのみ Visual Studio の出力ウィンドウにメッセージを表示します。


Imports System.Diagnostics
Imports System.IO
Imports System.Text

''' <summary>
''' Debug クラスのテスト
''' </summary>
''' <remarks></remarks>
Module Module1
  Const FILENAME As String = "C:\Temp\Debug.log"
  Sub Main(ByVal args As String())
    ' ファイルにも出力する。
    Dim stream As StreamWriter = New StreamWriter(FILENAME, True, Encoding.Default)
    Debug.Listeners.Add(New TextWriterTraceListener(stream))
    Debug.AutoFlush = True
    ' 出力コンソールに出力
    Debug.Print("Debug クラスのテスト (1)")
    Debug.WriteLine("Debug クラスのテスト (2)")
    Select Case args(0)
      Case 1
        Debug.Assert(args.Length >= 2)
      Case 2
        Debug.Assert(args.Length >= 2, "引数の数が2個未満です。")
      Case 3
        Debug.WriteLineIf(args.Length >= 2, "引数の数が2個以上です。")
     End Select
   End Sub
End Module
 
コメントする

投稿者: : 2015/08/05 投稿先 VB

 

タグ:

VB.NET 一括コメントアウトと解除

[一括コメントアウト]
①コメントアウトしたい部分をマウス等で選択します。
②Ctrl + K を押下します。
③Ctrl キーを押したまま、C を押下します。

[一括コメント解除]
①コメントアウトしたい部分をマウス等で選択します。
②Ctrl + K を押下します。
③Ctrl キーを押したまま、U を押下します。

 
コメントする

投稿者: : 2012/12/15 投稿先 VB

 

Yield と IEnumerable, IEnumerator

C#では yield return 文を使うと foreach 文の in 句に指定可能なレンジオブジェクトを作れます。Visual Basicでも Yield 文を使って同様のことができます。

C#では、IEnumerable インタフェースを実装したクラスのインスタンスが、in 句に指定可能なレンジオブジェクトになります。一方、Visual Basic では Iterator Function という関数がその代わりになります。この関数はIEnumerable(Of )を返す必要があります。

下のサンプルはC#で yield return を使うものですが、レンジオブジェクトになるクラス MyRange は IEnumerable を実装しています。IEnumerable は IEnumerator を返す GetEnumerator() メソッドを実装しなければなりません。このメソッドの中で、yield return を使って foreach 文で使われる項目を列挙します。

using System;
using System.Collections;

namespace Yield
{
  class MyRange : IEnumerable
  {
     object[] data;

     public MyRange()
     {
        data = new object[] { 100, "abc", -0.5, 0 };
     }
     public IEnumerator GetEnumerator()
     {
       int i = 0;
       while (i < data.Length)
       {
           i++;
           yield return data[i - 1];
       }
     }
  }
  class Program
  {
     static void Main(string[] args)
     {
        foreach (var x in new MyRange())
        {
            Console.WriteLine(x);
        }
#if DEBUG
        Console.ReadKey();
#endif
     }
   }
}

下のサンプルは Yield 文を使う Visual Basic の例です。C#ではIEnumerableインタフェースを実装したクラスを作成する必要がありましたが、Visual Basic では Iterator Function という関数を定義するだけです。
この関数は IEnumerable(Of ) 型を返し、その関数値は Yield文で列挙します。

' Yieldのテスト (Visual Basic)
Module Module1
Sub Main()
 For Each i In MyRange()
   Console.WriteLine(i)
 Next
 #If DEBUG Then
   Console.ReadKey()
 #End If
End Sub

Iterator Function MyRange() As IEnumerable(Of Integer)
   For i = 1 To 20 Step 3
     Yield i
   Next
End Function
End Module
 
コメントする

投稿者: : 2012/11/30 投稿先 C#, VB