mirror of
https://github.com/apache/poi.git
synced 2026-02-27 20:40:08 +08:00
https://svn.apache.org/repos/asf/poi/trunk ........ r693591 | josh | 2008-09-09 21:25:16 +0100 (Tue, 09 Sep 2008) | 1 line Added support for parsing array constants in formulas. (Helping investigation for bug 45752) ........ r693639 | josh | 2008-09-09 23:26:28 +0100 (Tue, 09 Sep 2008) | 1 line removed debug code accidentally submitted with r693591 ........ r693658 | josh | 2008-09-10 00:46:46 +0100 (Wed, 10 Sep 2008) | 2 lines Fixed special cases of INDEX function (single columns / single rows, and errors) ........ r693939 | josh | 2008-09-10 20:23:43 +0100 (Wed, 10 Sep 2008) | 1 line Fixing error value handling for numeric functions. Refactored hierarchy. ........ r693941 | josh | 2008-09-10 20:27:24 +0100 (Wed, 10 Sep 2008) | 1 line (Should have been submitted with 693939) Fixing error value handling for numeric functions. Refactored hierarchy. ........ r693947 | josh | 2008-09-10 20:33:58 +0100 (Wed, 10 Sep 2008) | 1 line (Should have been submitted with 693939) Fixing error value handling for numeric functions. Refactored hierarchy. ........ r693990 | josh | 2008-09-10 22:21:28 +0100 (Wed, 10 Sep 2008) | 1 line Refactored hierarchy of MultiOperandNumericFunction. Fixed error value handling. Enabled error value check in TestFormulasFromSpreadsheet ........ r694050 | josh | 2008-09-10 23:43:30 +0100 (Wed, 10 Sep 2008) | 1 line Refactored finance functions. ........ r694065 | josh | 2008-09-11 00:37:22 +0100 (Thu, 11 Sep 2008) | 1 line fixed special cases of MODE function ........ r694153 | josh | 2008-09-11 08:16:20 +0100 (Thu, 11 Sep 2008) | 1 line Refactoring MultiOperandNumericFunction - removed Ref2DEval. ........ r694534 | josh | 2008-09-12 00:18:50 +0100 (Fri, 12 Sep 2008) | 1 line Fix for bug 45639 - cleaned up index logic inside ColumnInfoRecordsAggregate ........ r694615 | josh | 2008-09-12 07:14:07 +0100 (Fri, 12 Sep 2008) | 1 line small tweak to unit test which was silently creating UnknownPtgs ........ r694619 | josh | 2008-09-12 07:58:52 +0100 (Fri, 12 Sep 2008) | 1 line Removed trailing comma from output of HexDump.toHex() ........ r694620 | josh | 2008-09-12 08:03:00 +0100 (Fri, 12 Sep 2008) | 1 line clarification of ArrayPtg size increment ........ r694631 | josh | 2008-09-12 08:43:20 +0100 (Fri, 12 Sep 2008) | 1 line Extended support for cached results of formula cells ........ r694643 | josh | 2008-09-12 09:18:54 +0100 (Fri, 12 Sep 2008) | 2 lines Made HSSFFormulaEvaluator no longer require initialisation with sheet or row. ........ r694877 | josh | 2008-09-13 06:14:26 +0100 (Sat, 13 Sep 2008) | 1 line Refactored TextFunctions. Some minor fixes - test cases added. ........ r694881 | josh | 2008-09-13 06:43:41 +0100 (Sat, 13 Sep 2008) | 1 line Added toString methods formatAsString to CellValue. Changed deprecation on CellValue.getRichTextStringValue ........ git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@694947 13f79535-47bb-0310-9956-ffa450edef68
192 lines
6.1 KiB
Java
192 lines
6.1 KiB
Java
/* ====================================================================
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
==================================================================== */
|
|
|
|
package org.apache.poi.util;
|
|
|
|
import java.io.*;
|
|
import java.util.List;
|
|
import java.util.ArrayList;
|
|
|
|
/**
|
|
* Utilities to read hex from files.
|
|
* TODO - move to test packages
|
|
*
|
|
* @author Marc Johnson
|
|
* @author Glen Stampoultzis (glens at apache.org)
|
|
*/
|
|
public class HexRead
|
|
{
|
|
/**
|
|
* This method reads hex data from a filename and returns a byte array.
|
|
* The file may contain line comments that are preceeded with a # symbol.
|
|
*
|
|
* @param filename The filename to read
|
|
* @return The bytes read from the file.
|
|
* @throws IOException If there was a problem while reading the file.
|
|
*/
|
|
public static byte[] readData( String filename ) throws IOException
|
|
{
|
|
File file = new File( filename );
|
|
FileInputStream stream = new FileInputStream( file );
|
|
try
|
|
{
|
|
return readData( stream, -1 );
|
|
}
|
|
finally
|
|
{
|
|
stream.close();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Same as readData(String) except that this method allows you to specify sections within
|
|
* a file. Sections are referenced using section headers in the form:
|
|
* <pre>
|
|
* [sectioname]
|
|
* </pre>
|
|
*
|
|
* @see #readData(String)
|
|
*/
|
|
public static byte[] readData(InputStream stream, String section ) throws IOException {
|
|
|
|
try
|
|
{
|
|
StringBuffer sectionText = new StringBuffer();
|
|
boolean inSection = false;
|
|
int c = stream.read();
|
|
while ( c != -1 )
|
|
{
|
|
switch ( c )
|
|
{
|
|
case '[':
|
|
inSection = true;
|
|
break;
|
|
case '\n':
|
|
case '\r':
|
|
inSection = false;
|
|
sectionText = new StringBuffer();
|
|
break;
|
|
case ']':
|
|
inSection = false;
|
|
if ( sectionText.toString().equals( section ) ) return readData( stream, '[' );
|
|
sectionText = new StringBuffer();
|
|
break;
|
|
default:
|
|
if ( inSection ) sectionText.append( (char) c );
|
|
}
|
|
c = stream.read();
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
stream.close();
|
|
}
|
|
throw new IOException( "Section '" + section + "' not found" );
|
|
}
|
|
public static byte[] readData( String filename, String section ) throws IOException
|
|
{
|
|
File file = new File( filename );
|
|
FileInputStream stream = new FileInputStream( file );
|
|
return readData(stream, section);
|
|
}
|
|
|
|
static public byte[] readData( InputStream stream, int eofChar )
|
|
throws IOException
|
|
{
|
|
int characterCount = 0;
|
|
byte b = (byte) 0;
|
|
List bytes = new ArrayList();
|
|
boolean done = false;
|
|
while ( !done )
|
|
{
|
|
int count = stream.read();
|
|
char baseChar = 'a';
|
|
if ( count == eofChar ) break;
|
|
switch ( count )
|
|
{
|
|
case '#':
|
|
readToEOL( stream );
|
|
break;
|
|
case '0': case '1': case '2': case '3': case '4': case '5':
|
|
case '6': case '7': case '8': case '9':
|
|
b <<= 4;
|
|
b += (byte) ( count - '0' );
|
|
characterCount++;
|
|
if ( characterCount == 2 )
|
|
{
|
|
bytes.add( new Byte( b ) );
|
|
characterCount = 0;
|
|
b = (byte) 0;
|
|
}
|
|
break;
|
|
case 'A':
|
|
case 'B':
|
|
case 'C':
|
|
case 'D':
|
|
case 'E':
|
|
case 'F':
|
|
baseChar = 'A';
|
|
case 'a':
|
|
case 'b':
|
|
case 'c':
|
|
case 'd':
|
|
case 'e':
|
|
case 'f':
|
|
b <<= 4;
|
|
b += (byte) ( count + 10 - baseChar );
|
|
characterCount++;
|
|
if ( characterCount == 2 )
|
|
{
|
|
bytes.add( new Byte( b ) );
|
|
characterCount = 0;
|
|
b = (byte) 0;
|
|
}
|
|
break;
|
|
case -1:
|
|
done = true;
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
}
|
|
Byte[] polished = (Byte[]) bytes.toArray( new Byte[0] );
|
|
byte[] rval = new byte[polished.length];
|
|
for ( int j = 0; j < polished.length; j++ )
|
|
{
|
|
rval[j] = polished[j].byteValue();
|
|
}
|
|
return rval;
|
|
}
|
|
|
|
static public byte[] readFromString(String data) {
|
|
try {
|
|
return readData(new ByteArrayInputStream( data.getBytes() ), -1);
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
static private void readToEOL( InputStream stream ) throws IOException
|
|
{
|
|
int c = stream.read();
|
|
while ( c != -1 && c != '\n' && c != '\r' )
|
|
{
|
|
c = stream.read();
|
|
}
|
|
}
|
|
}
|