이것은 완전히 새로운 것이므로 어디서부터 시작해야할지 모르겠습니다. 로컬 네트워크에있는 기존 일반 텍스트 파일의 데이터를로드하여 서브 필드를 채우는 하위 클래스 Dictionary이 있습니다.특정 환경에서 파일에 문자가 없습니다.
파일에는 몇 개의 헤더 행이 있고, 그 다음 데이터는 헤더가 반복되는 한 페이지 당 설정된 행 수 (59)까지 데이터 (각 행은 대시 선으로 구분됩니다)가 있습니다.
최근에는 원래 필요하지 않은 데이터에 대한 지원을 추가해야한다는 요구가있었습니다. 이 데이터에는 동일한 수의 헤더 열이 없습니다. 대신 각 데이터 세트에 포함될 특수 문자를 찾기로했습니다. 코드는 다음과 같습니다 :
/// <summary>
/// Load the work order information from the chart on the network.
/// </summary>
/// <param name="workOrder">Work order to load</param>
/// <param name="model">Model number of the work order to load. Loaded from MES if null.</param>
public WorkOrderInformation(String workOrder, String model)
{
if (model == null)
model = MES.getOrder(workOrder).Model;
String fileLocation = Path.Combine(Path.Combine(WorkOrderLocation, model), workOrder.Insert(4, "-") + ".TXT");
StreamReader file = new StreamReader(File.Open(fileLocation, FileMode.Open, FileAccess.Read));
int currentLineNumber = 0;
while (!file.EndOfStream)
{
string line = file.ReadLine();
Logging.Log.writeLog(log, "Loaded line | " + line);
currentLineNumber++;
int lineOnPage =(currentLineNumber % 59);
// Old way to determine if line contains data
//if (lineOnPage >= 10 && lineOnPage % 2 == 0)
if (line.Contains(((char)65533).ToString()))
{
Logging.Log.writeLog(log, "Line added to collection");
string[] sections = line.Split(new char[] { '|' });
if (sections.Length > 1)
{
UnitInfo newUnit = new UnitInfo(sections[0].Trim());
for (int j = 1; j < sections.Length; j++)
{
newUnit.Add(sections[j].Trim());
}
this.Add(newUnit.TestNumber,newUnit);
}
}
}
file.Close();
}
내 개발 컴퓨터 (Windows 7) 및 하나의 배포 컴퓨터 (Windows 2000)에서는 완벽하게 작동합니다. 다른 배포 시스템 (Windows XP)에서는 문자가 단순히 줄에 없습니다. 전체 줄을 기록 할 때 글자가 쓰여지지 않고 로그에 "내선을 추가했습니다"라는 메시지가 로그에 기록되는지 확인합니다.
3 대의 모든 컴퓨터에서 동일한 파일로 실행 중입니다.
편집 :
내가 대신 라인 자체의로드 라인의 길이를 저장하는 내 로깅을 변경하고 캐릭터가 단순히 string
에서 누락 된 것을 확인했다. 이 로그는 선이 65 개 문자의 길이를 말한다 작동하는 기계에는 64
2 편집하지 않으며 하나에 : 나는이 문제를 재검토하기로 결정했습니다
. 내 작업이 완료 얻을
double dummy;
if(double.TryParse(sections[0],out dummy))
하지만 이런 일이 왜 여전히 매우 궁금 대신 첫 번째 값이 숫자 인 경우 나 시간 앞서 문자열을 분할하고 확인하기로 결정했습니다 그 특수 문자를 검색 이 질문을 적어도 설명의 희망으로 열어 둘 것입니다.
편집 3 : 내가 생각했던 것보다 더 보인다
이 나뉩니다. Dan이 지적했듯이 내가 찾고있는 값 (0xFFFD)은 실제로는 분명히 있어서는 안되는 replacement character입니다. 인쇄물에서 문자를 식별 할 수 없습니다. 16 진수 편집기에서 파일을 열고 문자가 0x00F8 (ø)이어야한다는 것을 알았습니다.
그래서 StreamReader가 대체 문자로 0x00F8을로드하고 있거나 아닌 것으로 보입니다. 이제 문제는 왜입니까?
인코딩 문제 일 수 있습니다. 다음은 기본값으로 설정하는 방법을 보여주는 질문입니다. http://stackoverflow.com/questions/469163/how-to-set-the-default-encoding-in-windows-xp – TyCobb
@TyCobb 오 그 말이 될 것입니다. 환경에 따라 인코딩이 다를 수도 있다는 것을 알지 못했지만 인코딩 매개 변수를 허용하는 StreamReader 생성자를 사용하고 싶습니다. Windows 7이 어떤 인코딩을 사용하고 있는지 파악하려면 어떻게해야합니까? (작동하기 때문에 그 이후로 같은 것을 사용할 수 있습니다.) – Fr33dan
그래, 나는 당신이 현재 어떤 테스트를 더 쉽게했는지 확신 할 수 없었다. Windows 7에서 어디에서 찾을 수 있을지 잘 모르겠습니다. 표준 'Encoding.Unicode'라고 생각합니다. 일시적으로'Encoding.Default'를 호출하고 당신이 그 머신에서 얻은 것을보기 위해 중단 점을 호출 할 수 있습니다. – TyCobb