ファイルサイズが2GBを超えるファイルは開けないため、ファイルを分割します。
Linuxではsplitがありますが、windowsでは存在しないコマンドのため、
他の方法でファイルを分割します。
前提
ファイルが「C:/log/test.log」にあるとし、
このファイルを10万行ごとのファイルに分割する。
cd C:/log
$i=0; cat ./test.log -ReadCount 100000 | % {$_ > test$i.log; $i++;
ファイルサイズが2GBを超えるファイルは開けないため、ファイルを分割します。
Linuxではsplitがありますが、windowsでは存在しないコマンドのため、
他の方法でファイルを分割します。
前提
ファイルが「C:/log/test.log」にあるとし、
このファイルを10万行ごとのファイルに分割する。
cd C:/log
$i=0; cat ./test.log -ReadCount 100000 | % {$_ > test$i.log; $i++;
PLSQLでBLOBデータを出力します。
CREATE OR REPLACE PROCEDURE testBlobOut (kanriNo IN VARHCAR) AS
CURSOR C_CONTROL IS
SELECT
TB1.IMAGE_NAME,
TB1.IMAGE
FROM
SAMPLE TB1
WHERE
TB1.KANRI_NO = kanriNo;
v_blob_locater BLOB;
v_offset INTEGER := 1;
v_buffer LONG RAW;
v_file_buffer_size INTEGER := 32000;
v_amount INTEGER := 32000;
v_totalsize INTEGER;
v_filetype UTL_FILE.FILE_TYPE;
v_filename VARCHAR2(1000) := '';
v_openmode VARHCAR2(2) := 'wb';
v_dir VARCHAR2(1000) := 'C/temp';
BEGIN
OPEN C_CONTROL;
LOOP
FETCH C_CONTROL INTO v_blob_locater, v_filename;
EXIT WHEN C_CONTROL%NOTFOUND;
DBMS_OUTPUT.PUTLINE('fileName:' || v_filename);
v_totalsize := DBMS_LOB.GETLENGTH(v_blob_locater);
v_filetype := UTL_FILE.FOPEN(
v_dir,
v_filename,
v_openmode,
v_file_buffer_size
);
while v_offset < v_totalsize loop
if v_offset + v_amount > v_totalsize then
v_amount := v_totalsize - v_offset + 1;
end if;
DBMS_LOB.READ(
v_blob_locater,
v_amount,
v_offset,
v_buffer
);
UTL_FILE.PUT_RAW(
v_filetype,
v_buffer,
true
);
v_offset := v_offset + v_amount;
DBMS_OUTPUT.PUT_LINE('Offset :' || v_offset);
end loop;
UTL_FILE.FFLUSH(v_filetype);
UTL_FILE.FCLOSE(v_filetype);
DBMS_OUTPUT.PUT_LINE('fileSize :' || v_totalsize);
END LOOP;
CLOSE C_CONTROL;
EXCEPTION WHEN OTHERS THEN
UTL_FILE.FCLOSE_ALL;
RAISE;
END;
/
PLSQLの実行方法
set serveroutput ON
execute testBlobOut('000010');
PDFファイルに利用されている画像をJPG変換します。
以下のライブラリが必要です。
pdfbox-2.0.7.jar
commons-logging-1.2.jar
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
public class TestPDFBoxPdfToJpg {
public static void main(String[] args) {
//PDFドキュメントをロード
try (PDDocument document = PDDocument.load(new File("D:\\test\\pdf\\e-ticket.pdf"));) {
//ページのリストから最初の1ページを取得する
PDPageTree pageTree = document.getDocumentCatalog().getPages();
PDPage page = pageTree.get(0);
//ページからリソースを取得し、最初のイメージを取得する。
PDResources resources = page.getResources();
Iterator<COSName> ite = resources.getXObjectNames().iterator();
int i = 0;
while (ite.hasNext()) {
COSName name = ite.next();
//取得したイメージをファイルに出力
PDXObject xobject = resources.getXObject(name);
if (xobject instanceof PDImageXObject) {
PDImageXObject image2 = (PDImageXObject) resources.getXObject(name);
ImageIO.write(image2.getImage(), "jpg", new FileOutputStream("D:\\test\\pdf\\e-ticket" + i + ".jpg"));
}
i++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
VBAで圧縮解凍処理を行います。
'オプションの意味:変数宣言必須
Option Explicit
'圧縮処理(実行)
Public Sub ZipSample()
ZipFileOrFolder "C:\Test\Files" 'フォルダ圧縮
MsgBox "処理が終了しました。", vbInformation + vbSystemModal
End Sub
'解凍処理(実行)
Public Sub UnZipSample()
UnZipFile "C:\Test\Files\Test.zip"
MsgBox "処理が終了しました。", vbInformation + vbSystemModal
End Sub
'圧縮処理
Public Sub ZipFileOrFolder(ByVal SrcPath As Variant, _
Optional ByVal DestFolderPath As Variant = "")
'ファイル・フォルダをZIP形式で圧縮
'SrcPath:元ファイル・フォルダ
'DestFolderPath:出力先、指定しない場合は元ファイル・フォルダと同じ場所
Dim DestFilePath As Variant
With CreateObject("Scripting.FileSystemObject")
If IsFolder(DestFolderPath) = False Then
If IsFolder(SrcPath) = True Then
DestFolderPath = SrcPath
ElseIf IsFile(SrcPath) = True Then
DestFolderPath = .GetFile(SrcPath).ParentFolder.Path
Else: Exit Sub
End If
End If
DestFilePath = AddPathSeparator(DestFolderPath) & _
.GetBaseName(SrcPath) & ".zip"
'空のZIPファイル作成
With .CreateTextFile(DestFilePath, True)
.Write ChrW(&H50) & ChrW(&H4B) & ChrW(&H5) & ChrW(&H6) & String(18, ChrW(0))
.Close
End With
End With
With CreateObject("Shell.Application")
With .NameSpace(DestFilePath)
.CopyHere SrcPath
While .Items.Count < 1
DoEvents
Wend
End With
End With
End Sub
'解凍処理
Public Sub UnZipFile(ByVal SrcPath As Variant, _
Optional ByVal DestFolderPath As Variant = "")
'ZIPファイルを解凍
'SrcPath:元ファイル
'DestFolderPath:出力先、指定しない場合は元ファイルと同じ場所
'※出力先に同名ファイルがあった場合はユーザー判断で処理
With CreateObject("Scripting.FileSystemObject")
If .FileExists(SrcPath) = False Then Exit Sub
If LCase(.GetExtensionName(SrcPath)) <> "zip" Then Exit Sub
If IsFolder(DestFolderPath) = False Then
DestFolderPath = .GetFile(SrcPath).ParentFolder.Path
End If
End With
With CreateObject("Shell.Application")
.NameSpace(DestFolderPath).CopyHere .NameSpace(SrcPath).Items
End With
End Sub
'フォルダチェック処理
Private Function IsFolder(ByVal SrcPath As String) As Boolean
IsFolder = CreateObject("Scripting.FileSystemObject").FolderExists(SrcPath)
End Function
'ファイルチェック処理
Private Function IsFile(ByVal SrcPath As String) As Boolean
IsFile = CreateObject("Scripting.FileSystemObject").FileExists(SrcPath)
End Function
'ファイルパスセパレータ追加処理
Private Function AddPathSeparator(ByVal SrcPath As String) As String
If Right(SrcPath, 1) <> ChrW(92) Then SrcPath = SrcPath & ChrW(92)
AddPathSeparator = SrcPath
End Function
batファイルで一定時間待機する。
@echo off echo "テスト中" timeout /t 180 > nul pause
Excelでオブジェクトを変数宣言するには
遅延バインディングと事前バインディングの2種類の方法がある。
実装の違い(例として、FileSystemObjectを利用)
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
「ツール」→「参照設定」で
「Microsoft Scripting Runtime」にチェックを付ける。
Dim objFSO As New FileSystemObject または、 Dim objFSO As FileSystemObject Set objFSO = New FileSystemObject
一言で言えば、変数宣言の型が
遅延バインディングはObject型
事前バインディングは特定のオブジェクト型
となっている。
オブジェクトが Object 型として宣言された変数に代入する場合、
遅延(実行時)にバインディングされる。
この型のオブジェクトは、任意のオブジェクトへの参照を保持できるが、
事前バインディングされたオブジェクトの利点をほとんど持たない。
特定のオブジェクト型として宣言された変数に代入する場合、
オブジェクトは事前(コンパイル時に)バインディングされる。
事前バインディングされたオブジェクトでは、アプリケーションが実行される前に、
コンパイラによってメモリの割り当てとその他の最適化が実行される。
また、自動クイックヒントが表示されるようになる。
名前の定義は有能だと思うのですが、
参考ブックからコピーすると一緒にコピーされ、
収集つかなくなるためこれで削除します。
Option Explicit
Private Sub NameDefDel()
Dim Ans, RefStyle, n
Ans = MsgBox("実行しますか?", vbYesNo, "実行確認")
If Ans = vbNo Then Exit Sub
RefStyle = Application.ReferenceStyle
If RefStyle = xlR1C1 Then
Application.ReferenceStyle = xlA1
Else
Application.ReferenceStyle = xlR1C1
End If
For Each n In ActiveWorkbook.Names
If Not n.Name Like "*!Print_Area" And _
Not n.Name Like "*!Print_Titles" Then
n.Delete
End If
Next
Application.ReferenceStyle = RefStyle
MsgBox "完了しました!"
End Sub
例外内容を文字列で取得します。
例外内容をメール本文等に出力する際に利用します。
/**
* 例外内容取得処理
* @param 例外オブジェクト
* @return 例外内容文字列
*/
public static String getTrace(Throwable th) {
StringBuilder sb = new StringBuilder();
String lineSeparator = System.getProperty("line.separator");
if (th != null) {
sb.append(th.getClass().getName() + ":" + th.getMessage());
StackTraceElement[] stack = th.getStackTrace();
if (stack != null) {
for (int i = 0; i < stack.length; i++) {
sb.append(lineSeparator);
sb.append("\tat " + stack[i].toString());
}
}
sb.append(lineSeparator);
Throwable causeTh = th.getCause();
String caused = getCaused(causeTh);
sb.append(caused);
}
return sb.toString();
}
/**
* 例外内容取得処理(原因)
* @param 例外オブジェクト
* @return 例外内容文字列
*/
public static String getCaused(Throwable th) {
StringBuilder sb = new StringBuilder();
String lineSeparator = System.getProperty("line.separator");
Throwable chainTh = null;
if (th != null) {
sb.append("Caused by: " + th.getClass().getName() + ":" + th.getMessage());
StackTraceElement[] stack = th.getStackTrace();
if (stack != null) {
for (int i = 0; i < stack.length; i++) {
sb.append(lineSeparator);
sb.append("\tat " + stack[i].toString());
}
}
sb.append(lineSeparator);
chainTh = th.getCause();
} else {
return sb.toString();
}
return sb.append(getCaused(chainTh)).toString();
}
/**
* テストドライバ
* @param args
*/
public static void main(String[] args) {
try {
test();
} catch (Throwable th) {
System.out.println("JavaAPIで例外出力");
th.printStackTrace();
System.out.println();
System.out.println("独自APIで例外出力");
System.out.println(getTrace(th));
}
}
public static void test() throws Exception {
try {
try {
int i = 0;
int j = 100;
int k = j/i; // ここでエラー発生
} catch (Exception e) {
throw new Exception("エラー", e);
}
} catch (Exception e) {
//throw e;
throw new Exception("エラー2", e);
}
}
外部からインポートしたプロジェクトで
他フォームをShowやShowDialogで開く際、
FileNotFoundが発生している場合、プロジェクトフォルダ内の「App.config」を見直す。
外部ライブラリ等を参照している場合、パスが記載されていることがあり、
そのパスに外部ライブラリがないことで発生している。
コマンドプロンプトを管理者権限で起動して以下のコマンドを実行する。
netstat -bn -p TCP