Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: WindowsMediaPlayer1 не могу открыть файл mp4

Добрый день! Такой вопрос не могу открыть файл через код.
Если в свойствах WMP указать полный путь файла вот так E:\1\..\..., все работает! Но если открывать файл через код ничего не происходит и кнопка старт неактивна.Файл у меня в папке с проектом.
Вот код:
Visual Basic
1
2
3
Private Sub WindowsMediaPlayer1_OpenStateChange(ByVal NewState As Long)
    WindowsMediaPlayer1.URL = App.Path & "\Тыж программист.mp4"
End Sub
Ответ: А почему именно в событие WindowsMediaPlayer1_OpenStateChange (понятия не имею, за что оно отвечает)?
Попробовал так -
Visual Basic
1
2
3
4
Private Sub Form_Activate()
'WindowsMediaPlayer1.URL = "d:\сравнение планет.flv.mp4"
WindowsMediaPlayer1.URL = App.Path & "\Тыж программист.mp4"
End Sub
имеющийся у меня файл (тоже с русскими буквами и пробелами) запустился.
Вопрос: Не могу открыть файл в ListBox

Здравствуйте, не могу открыть файл в ListBox. Заранее благодарю.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
unit Ass;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TMainForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  f:TFileStream;
 
  MainForm1: TMainForm1;
  aa: array[0..4] of integer ;
  
implementation
 
{$R *.dfm}
 
 
procedure TMainForm1.Button1Click(Sender: TObject);
 type mas=array[0..1111] of integer;
 
 var
  Total: Longword;
  OperBegin, OperEnd: TTimeStamp;
  mas1:array of mas;
 
begin
   setlength(mas1,1111);
 
     aa[0]:=0;
     aa[1]:=1;
     aa[2]:=2;
     aa[3]:=3;
     aa[4]:=4;
 
  begin
   f:=TFileStream.Create('C:\filename.txt',fmCreate);
   f.free;
 
   f:=TFileStream.Create('C:\filename.txt',fmOpenReadWrite);
   f.Seek(0,soFromBeginning);
   f.Write(aa,4);
   f.Read(aa,4);
   ListBox1.Items.LoadFromFile('C:\filename.txt');
   f.Free;
  end;
  OperEnd:=DateTimeToTimeStamp(Now);
  Total:=OperEnd.Time-OperBegin.Time;
  
  ListBox1.Items.Add(IntToStr(Total)+' MSec');
end;
 
end.
Ответ: ну так и сохрани в файл строки
самый простой вариант
Delphi
1
2
3
4
5
list:=TStringList.Create;
for i:=0 to 5 do
  list.Add( IntToStr(I) );
list.savetoFile( FileName );
list.free;
Вопрос: Не могу обратиться к файлу xml

Здравствуйте! Не могу обратиться к xml файлу. Пишет:Слишком длинный путь или имя файла. Полное имя файла должно содержать меньше 260 знаков, а имя каталога - меньше 248 знаков.
      XmlReaderSettings settings = new XmlReaderSettings();
                  settings.IgnoreWhitespace = true;
                  settings.IgnoreComments = true;
       
                  string productsFile = Path.Combine(Request.PhysicalApplicationPath, "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20=%20%22TIBX%22%20and%20startDate%20=%20%222013-01-01%22%20and%20endDate%20=%20%222014-01-01%22&format=xml&diagnostics=true&env=store://datatables.org/alltableswithkeys");
Ответ: Dmitriy1987,

Вот тут все написано.
Вопрос: Не могу обратиться к файлу xml.

Здравствуйте! Не могу обратиться к xml файлу. Пишет:Слишком длинный путь или имя файла. Полное имя файла должно содержать меньше 260 знаков, а имя каталога - меньше 248 знаков.
    XmlReaderSettings settings = new XmlReaderSettings();
                settings.IgnoreWhitespace = true;
                settings.IgnoreComments = true;
     
                string productsFile = Path.Combine(Request.PhysicalApplicationPath, "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20=%20%22TIBX%22%20and%20startDate%20=%20%222013-01-01%22%20and%20endDate%20=%20%222014-01-01%22&format=xml&diagnostics=true&env=store://datatables.org/alltableswithkeys");
Ответ:
попробуй так:

    var path = @"http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20=%20%22TIBX%22%20and%20startDate%20=%20%222013-01-01%22%20and%20endDate%20=%20%222014-01-01%22&format=xml&diagnostics=true&env=store://datatables.org/alltableswithkeys"
    string productsFile = Path.Combine(Request.PhysicalApplicationPath, path);
Вопрос: Не могу обратиться к [i] элементу

Не могу обратиться к элементу.
Вот кусок моего кода:
PHP:

  1. $term = taxonomy_term_load(arg(2));
  2. $tid = $term->tid;
  3. ($tid, integer);
  4. $parent = taxonomy_get_parents($tid);
  5.  
  6. ($parent);



Выдается следующее:
CODE (html):

  1. integerArray
  2. (
  3.     [85] => stdClass Object
  4.         (
  5.             [tid] => 85
  6.             [vid] => 2
  7.             [name] => Лампы, источники света
  8.             [description] =>
  9.             [format] => full_html
  10.             [weight] => 0
  11.             [vocabulary_machine_name] => catalog
  12.             [field_pic] => Array
  13.                 (
  14.                 )


Получается чтобы добраться до [i]name, мне надо обратиться так:
PHP:

  1. ($parent[85]->name);

но [85] меняется и равняется $tid. И если я пишу так:
PHP:

  1. ($parent[$tid]->name);

то ничего не выводится.
Как правильно вписать туда $tid?
(Добавление)
Я ошибся немного. $tid в данном случае не равно 85. Значит надо другой функцией воспользоваться.
Я ведь не могу обратиться к $parent[85], не зная что бкдет стоять вместо 85?
Ответ:
Спасибо. Сделал в цикле for.
Вопрос: Не могу обратиться к TreeMap в классе без метода main

Здравствуйте! Возник такой вопрос. Могу ли я работать с TreeMap не в главном классе? Почему я не могу обратиться к карте? (Ошибка в строке 21 <identifier> expected. Однако при обращении к карте в методах все работает). Типом элемента коллекции является пользовательский класс Contact. Заранее спасибо.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package telephonelist;
 
import java.util.*;
 
public class Brain {
Integer key;  
Map <Integer,Contact> tellist = new TreeMap<>();
 
public void Insert(Integer key)
{
tellist.put(key, new Contact());
};
 
 
 
public void delete(Integer key)
{
tellist.remove(key);
};
 
tellist.put(1,new Contact("Василий Петров","22-33-44","Москва"));
 
 
}
Ответ: iSmokeJC, да,спасибо,я уже исправил)
Вопрос: Spring Boot exception handling (не могу обратиться к странице)

Spring Boot exception handling
Подскажите почему возникает эта ошибка? не могу обратиться к странице.

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
@SpringBootApplication
public class PhoneBookApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(PhoneBookApplication.class, args);
    }
}
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
public class IndexController implements ErrorController {
    private static final String PATH = "/error";
 
    @RequestMapping(value = PATH)
    public String error() {
        return "Error handling!";
    }
 
    @Override
    public String getErrorPath() {
        return PATH;
    }
}
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
public class IndexController implements ErrorController {
    private static final String PATH = "/error";
 
    @RequestMapping(value = PATH)
    public String error() {
        return "Error handling!";
    }
 
    @Override
    public String getErrorPath() {
        return PATH;
    }
}
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
public class IndexController implements ErrorController {
    private static final String PATH = "/error";
 
    @RequestMapping(value = PATH)
    public String error() {
        return "Error handling!";
    }
 
    @Override
    public String getErrorPath() {
        return PATH;
    }
}
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Controller
@RequestMapping("login.jsp")
public class LoginController {
 
    @RequestMapping(method = RequestMethod.GET)
    public String init(ModelMap modelMap) {
        modelMap.put("info", "Hello my dear friend");
        return "Login";
    }
 
    @RequestMapping(method = RequestMethod.POST)
    public String submit(ModelMap modelMap, @ModelAttribute("loginModel") @Valid LoginModel loginModel) {
        System.out.println("in submit" + loginModel);
        String password = loginModel.getPassword();
        if (password != null && password.equals("goodday")) {
            modelMap.put("userInfo", loginModel.getUserName());
            return "Home";
        } else {
            modelMap.put("error", "Invalid UserName / Password");
            return "Login";
        }
    }
}
Вот что пишет SPRING
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 :: Spring Boot ::        (v1.3.3.RELEASE)
 
2016-04-19 20:01:04.991  INFO 14485 --- [           main] com.ua.kiev.makson.PhoneBookApplication  : Starting PhoneBookApplication on Lenovo-Z50-75 with PID 14485 (/home/makson/IDEA/IdeaProjects/PhoneBook/target/classes started by makson in /home/makson/IDEA/IdeaProjects/PhoneBook)
2016-04-19 20:01:05.001  INFO 14485 --- [           main] com.ua.kiev.makson.PhoneBookApplication  : No active profile set, falling back to default profiles: default
2016-04-19 20:01:05.333  INFO 14485 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@2d127a61: startup date [Tue Apr 19 20:01:05 EEST 2016]; root of context hierarchy
2016-04-19 20:01:08.671  INFO 14485 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-04-19 20:01:08.707  INFO 14485 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-04-19 20:01:08.709  INFO 14485 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.32
2016-04-19 20:01:08.964  INFO 14485 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-04-19 20:01:08.964  INFO 14485 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3648 ms
2016-04-19 20:01:09.204  INFO 14485 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2016-04-19 20:01:09.213  INFO 14485 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-04-19 20:01:09.704  INFO 14485 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public java.lang.String com.ua.kiev.makson.controllers.IndexController.error()
2016-04-19 20:01:09.707  INFO 14485 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/login.jsp],methods=[POST]}" onto public java.lang.String com.ua.kiev.makson.controllers.LoginController.submit(org.springframework.ui.ModelMap,com.ua.kiev.makson.LoginModel)
2016-04-19 20:01:09.708  INFO 14485 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/login.jsp],methods=[GET]}" onto public java.lang.String com.ua.kiev.makson.controllers.LoginController.init(org.springframework.ui.ModelMap)
2016-04-19 20:01:09.783  INFO 14485 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/WEB-INF/pages/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-04-19 20:01:09.791  INFO 14485 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler]
2016-04-19 20:01:09.871  INFO 14485 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@2d127a61: startup date [Tue Apr 19 20:01:05 EEST 2016]; root of context hierarchy
2016-04-19 20:01:10.545  INFO 14485 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-04-19 20:01:10.672  INFO 14485 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-04-19 20:01:10.683  INFO 14485 --- [           main] com.ua.kiev.makson.PhoneBookApplication  : Started PhoneBookApplication in 6.615 seconds (JVM running for 7.546)
2016-04-19 20:03:08.586  INFO 14485 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2016-04-19 20:03:08.587  INFO 14485 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2016-04-19 20:03:08.612  INFO 14485 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 25 ms
Добавлено через 34 минуты
страница на которую хочу попасть
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>User Login.</title>
</head>
<body>
<h4>User Login.</h4>
<form:form method="post" name="loginForm">
    <table>
        <tr>
            <td>User Name:</td>
            <td><input name="userName" type="textbox"></td>
        </tr>
        <tr>
            <td>Password:</td>
            <td><input name="password" type="password"></td>
        </tr>
        <tr>
            <td colspan="2" align="right"><input type="submit" value="Submit"></td>
        </tr>
    </table>
    <div style="color:red">${error}</div>
</form:form>
 
</body>
</html>
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Configuration
@ComponentScan("com.ua.kiev.makson")
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {
 
    @Autowired
    LoginModel loginModel;
 
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/WEB-INF/pages/**").addResourceLocations("/pages/");
    }
 
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
 
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("WEB-INF/pages/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
 
}
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{AppConfig.class};
    }
 
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{
                AppConfig.class
        };
    }
 
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
Ответ: Так.
При маппинге запросов нужно писать адрес, на который идет маппинг
Сообщение от kamenb
@RequestMapping("login.jsp")
Сообщение от kamenb
@RequestMapping(method = RequestMethod.GET)
Java(TM) 2 Platform Standard Edition 5.0
1
2
@RequestMapping(value="login.jsp")
@RequestMapping(value={"","/"}, method = RequestMethod.GET)
Сообщение от kamenb
@Override
* * public void addResourceHandlers(ResourceHandlerRegistry registry) {
* * * * registry.addResourceHandler("/WEB-INF/pages/**").addResourceLocations("/pages/");
* * }
Таким образом маппятся статические ресурсы, уберите это.
Вопрос: Вы не можете открыть файл теста.на lzw.

This is a training file. I want to follow his activities in the dynamic using the CodeBlocks environment debugger. I really want to, but I can't.
When debugging, and only in debug mode, you cannot open the test.lzw file. What do I do? How do I find a way out, a starting?
Help!


Это обучающая файл. Я хочу следовать его деятельности в динамике с помощью CodeBlocks отладчика среды.
Я очень хочу, но не могу его.
На отладку, и только в режиме отладки, Вы не можете открыть файл теста.на lzw.
Что же мне делать? Как мне найти выход, начать?
Помогите!
+
/********************************************************************
**
** Copyright (c) 1989 Mark R. Nelson
**
** LZW data compression/expansion demonstration program.
**
** April 13, 1989
**
** Minor mods made 7/19/2006 to conform with ANSI-C - prototypes, casting,
** and argument agreement.
**
*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BITS 12                   /* Setting the number of bits to 12, 13*/
#define HASHING_SHIFT (BITS-8)    /* or 14 affects several constants.    */
#define MAX_VALUE (1 << BITS) - 1 /* Note that MS-DOS machines need to   */
#define MAX_CODE MAX_VALUE - 1    /* compile their code in large model if*/
                                  /* 14 bits are selected.               */
#if BITS == 14
  #define TABLE_SIZE 18041        /* The string table size needs to be a */
#endif                            /* prime number that is somewhat larger*/
#if BITS == 13                    /* than 2**BITS.                       */
  #define TABLE_SIZE 9029
#endif
#if BITS <= 12
  #define TABLE_SIZE 5021
#endif

void *malloc();

int *code_value;                  /* This is the code value array        */
unsigned int *prefix_code;        /* This array holds the prefix codes   */
unsigned char *append_character;  /* This array holds the appended chars */
unsigned char decode_stack[4000]; /* This array holds the decoded string */

/*
 * Forward declarations
 */
void compress(FILE *input,FILE *output);
void expand(FILE *input,FILE *output);
int find_match(int hash_prefix,unsigned int hash_character);
void output_code(FILE *output,unsigned int code);
unsigned int input_code(FILE *input);
unsigned char *decode_string(unsigned char *buffer,unsigned int code);

/********************************************************************
**
** This program gets a file name from the command line.  It compresses the
** file, placing its output in a file named test.lzw.  It then expands
** test.lzw into test.out.  Test.out should then be an exact duplicate of
** the input file.
**
*************************************************************************/

main(int argc, char *argv[])
{
FILE *input_file;
FILE *output_file;
FILE *lzw_file;
char input_file_name[81];

/*
**  The three buffers are needed for the compression phase.
*/
  code_value=(int*)malloc(TABLE_SIZE*sizeof(int));
  prefix_code=(unsigned int *)malloc(TABLE_SIZE*sizeof(unsigned int));
  append_character=(unsigned char *)malloc(TABLE_SIZE*sizeof(unsigned char));
  if (code_value==NULL || prefix_code==NULL || append_character==NULL)
  {
    printf("Fatal error allocating table space!\n");
    exit(-1);
  }
/*
** Get the file name, open it up, and open up the lzw output file.
*/
  if (argc>1)
    strcpy(input_file_name,argv[1]);
  else
  {
    printf("Input file name? ");
    scanf("%s",input_file_name);
  }
  input_file=fopen(input_file_name,"rb");
  lzw_file=fopen("test.lzw","wb");
  if (input_file==NULL || lzw_file==NULL)
  {
    printf("Fatal error opening files.\n");
    exit(-1);
  };
/*
** Compress the file.
*/
  compress(input_file,lzw_file);
  fclose(input_file);
  fclose(lzw_file);
  free(code_value);
/*
** Now open the files for the expansion.
*/
  lzw_file=fopen("test.lzw","rb");
  output_file=fopen("test.out","wb");
  if (lzw_file==NULL || output_file==NULL)
  {
    printf("Fatal error opening files.\n");
    exit(-2);
  };
/*
** Expand the file.
*/
  expand(lzw_file,output_file);
  fclose(lzw_file);
  fclose(output_file);

  free(prefix_code);
  free(append_character);
}

/*
** This is the compression routine.  The code should be a fairly close
** match to the algorithm accompanying the article.
**
*/

void compress(FILE *input,FILE *output)
{
unsigned int next_code;
unsigned int character;
unsigned int string_code;
unsigned int index;
int i;

  next_code=256;              /* Next code is the next available string code*/
  for (i=0;i<TABLE_SIZE;i++)  /* Clear out the string table before starting */
    code_value[i]=-1;

  i=0;
  printf("Compressing...\n");
  string_code=getc(input);    /* Get the first code                         */
/*
** This is the main loop where it all happens.  This loop runs util all of
** the input has been exhausted.  Note that it stops adding codes to the
** table after all of the possible codes have been defined.
*/
  while ((character=getc(input)) != (unsigned)EOF)
  {
    if (++i==1000)                         /* Print a * every 1000    */
    {                                      /* input characters.  This */
      i=0;                                 /* is just a pacifier.     */
      printf("*");
    }
    index=find_match(string_code,character);/* See if the string is in */
    if (code_value[index] != -1)            /* the table.  If it is,   */
      string_code=code_value[index];        /* get the code value.  If */
    else                                    /* the string is not in the*/
    {                                       /* table, try to add it.   */
      if (next_code <= MAX_CODE)
      {
        code_value[index]=next_code++;
        prefix_code[index]=string_code;
        append_character[index]=character;
      }
      output_code(output,string_code);  /* When a string is found  */
      string_code=character;            /* that is not in the table*/
    }                                   /* I output the last string*/
  }                                     /* after adding the new one*/
/*
** End of the main loop.
*/
  output_code(output,string_code); /* Output the last code               */
  output_code(output,MAX_VALUE);   /* Output the end of buffer code      */
  output_code(output,0);           /* This code flushes the output buffer*/
  printf("\n");
}

/*
** This is the hashing routine.  It tries to find a match for the prefix+char
** string in the string table.  If it finds it, the index is returned.  If
** the string is not found, the first available index in the string table is
** returned instead.
*/

int find_match(int hash_prefix,unsigned int hash_character)
{
int index;
int offset;

  index = (hash_character << HASHING_SHIFT) ^ hash_prefix;
  if (index == 0)
    offset = 1;
  else
    offset = TABLE_SIZE - index;
  while (1)
  {
    if (code_value[index] == -1)
      return(index);
    if (prefix_code[index] == hash_prefix &&
        append_character[index] == hash_character)
      return(index);
    index -= offset;
    if (index < 0)
      index += TABLE_SIZE;
  }
}

/*
**  This is the expansion routine.  It takes an LZW format file, and expands
**  it to an output file.  The code here should be a fairly close match to
**  the algorithm in the accompanying article.
*/

void expand(FILE *input,FILE *output)
{
unsigned int next_code;
unsigned int new_code;
unsigned int old_code;
int character;
int counter;
unsigned char *string;

  next_code=256;           /* This is the next available code to define */
  counter=0;               /* Counter is used as a pacifier.            */
  printf("Expanding...\n");

  old_code=input_code(input);  /* Read in the first code, initialize the */
  character=old_code;          /* character variable, and send the first */
  putc(old_code,output);       /* code to the output file                */
/*
**  This is the main expansion loop.  It reads in characters from the LZW file
**  until it sees the special code used to inidicate the end of the data.
*/
  while ((new_code=input_code(input)) != (MAX_VALUE))
  {
    if (++counter==1000)   /* This section of code prints out     */
    {                      /* an asterisk every 1000 characters   */
      counter=0;           /* It is just a pacifier.              */
      printf("*");
    }
/*
** This code checks for the special STRING+CHARACTER+STRING+CHARACTER+STRING
** case which generates an undefined code.  It handles it by decoding
** the last code, and adding a single character to the end of the decode string.
*/
    if (new_code>=next_code)
    {
      *decode_stack=character;
      string=decode_string(decode_stack+1,old_code);
    }
/*
** Otherwise we do a straight decode of the new code.
*/
    else
      string=decode_string(decode_stack,new_code);
/*
** Now we output the decoded string in reverse order.
*/
    character=*string;
    while (string >= decode_stack)
      putc(*string--,output);
/*
** Finally, if possible, add a new code to the string table.
*/
    if (next_code <= MAX_CODE)
    {
      prefix_code[next_code]=old_code;
      append_character[next_code]=character;
      next_code++;
    }
    old_code=new_code;
  }
  printf("\n");
}

/*
** This routine simply decodes a string from the string table, storing
** it in a buffer.  The buffer can then be output in reverse order by
** the expansion program.
*/

unsigned char *decode_string(unsigned char *buffer,unsigned int code)
{
int i;

  i=0;
  while (code > 255)
  {
    *buffer++ = append_character[code];
    code=prefix_code[code];
    if (i++>=MAX_CODE)
    {
      printf("Fatal error during code expansion.\n");
      exit(-3);
    }
  }
  *buffer=code;
  return(buffer);
}

/*
** The following two routines are used to output variable length
** codes.  They are written strictly for clarity, and are not
** particularyl efficient.
*/

unsigned int input_code(FILE *input)
{
unsigned int return_value;
static int input_bit_count=0;
static unsigned long input_bit_buffer=0L;

  while (input_bit_count <= 24)
  {
    input_bit_buffer |=
        (unsigned long) getc(input) << (24-input_bit_count);
    input_bit_count += 8;
  }
  return_value=input_bit_buffer >> (32-BITS);
  input_bit_buffer <<= BITS;
  input_bit_count -= BITS;
  return(return_value);
}

void output_code(FILE *output,unsigned int code)
{
static int output_bit_count=0;
static unsigned long output_bit_buffer=0L;

  output_bit_buffer |= (unsigned long) code << (32-BITS-output_bit_count);
  output_bit_count += BITS;
  while (output_bit_count >= 8)
  {
    putc(output_bit_buffer >> 24,output);
    output_bit_buffer <<= 8;
    output_bit_count -= 8;
  }
}
Ответ: ZXCD, постарайтесь экономить пространство форума. Такие длинные тексты
лучше публиковать под спойлером.

Также я рекомендую ознакомиться с
Вопрос: Не могу открыть файл

Здравствуйте. Не могу открыть файл или заново создать. На основную прог. не обращайте внимание. Заранее благодарю.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
unit Ass;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TMainForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  f:TFileStream;
  MainForm1: TMainForm1;
  
  j: array [0..1118,0..613,0..180] of word integer; // Матрица расчетов  x*cos(i)+y*sin(i)=r в ecx.
 
implementation
 
{$R *.dfm}
 
 
procedure TMainForm1.Button1Click(Sender: TObject);
 type mas=array[0..1111] of integer;
 Label n1,q1,k0,k1,k2,k3,k4;
 var
  Total: Longword;
  OperBegin, OperEnd: TTimeStamp;
  mas1:array of mas;
  l,n,t,id,ix,iy,ii,ki,ii2,count,ik:  integer;
  c,re,d,g,i,rn,p,u,w,rx,ry,rl:real;
  x,y,si,sx,sy:short ;
begin
   setlength(mas1,1111);
 Canvas.Pen.Color:=clBlack;
 Canvas.Pen.Width:=1;
 Canvas.Brush.Style:=bsClear;
 Canvas.MoveTo(50{200},0);
 Canvas.LineTo(0,50{100});
 OperBegin:=DateTimeToTimeStamp(Now);
 n:=0;
begin
  for y:=0 to 600 do //Строка.
begin
  for x:=0 to 1100 do     //Столбец.
begin
 if (Canvas.Pixels[x,y]=clBlack) then
begin
 b[y,x]:=1;
 n:=n+1;
   ListBox1.Items.Add(IntToStr(n)+' Количество точек. ');
   ListBox1.Items.Add(IntToStr(y)+'  Y Номер строки. ');
   ListBox1.Items.Add(IntToStr(x)+'  X Номер столбца. ');
end;
 end;
  end;
   end;
 
 
 
 c:=181;//Ограниченее по градусам, до 180, включительно.
 re:=614;//Ограничение по y.
 rl:=1119;//Ограничение по x.
 rn:=0.017453;//Присваивание к перемнной 3.14/180= 0.017453 .
 p:=3.14;//Pi=3.14.
 i:=0;// Установка переменной градуса i в 0 .
 ix:=0;// Установка переменной ix для эффективного адреса в 0 .
 iy:=0;//Установка переменной iy для эффективного адреса в 0 .
 ii:=0;// Установка переменной ii для эффективного адреса в 0 .
 ik:=0; // Переносим ik переменую для эффективного адреса в регстр ecx.
 
 
 asm
 
             push ecx
             xor ecx,ecx
    lea ecx,j
             //Обнулим ecx как матрицу
             fldz // Установка ячеик в 0.
             push edx // Сохраняем содержимое edx и используем edx.
             xor edx,edx// Очещаем edx, устанавливаем в нуль.
     k3:     mov edx,ix //Вносим текущее x для эффективного адресса.
               {mov kx, edx // Для контроля.}
             imul edx, 110340 //Умножаем x*(630*180) количество столбцов y на глубину i.
             push edx // Сохраняем содержимое edx  x*(630*180).
             xor edx,edx // Очещаем edx, устанавливаем в нуль.
             mov edx,iy // Вносим текущее переменую y для эффективного адресса.
             imul edx, 180 // Производем iy*180 для эффективного адресса.
             mov id,edx //Для временого хранения, переносим iy*180 для эффективного адресса в id .
             pop edx // Возвращаем содержимое edx  x*(630*180).
             add edx,id // Слаживаем ix*110340+iy*180
             mov edx,ii//Слаживаем   ix*110340+iy*180+ii
             fist [ecx+2*edx]// получаем [ecx+2*(ix*110340+iy*180+ii)]
              {fist iq // Для контроля.}
             fld1
             fadd   // Переменая для увеличения на 1.
              
             inc ii // Увелечение на 1 переменой ii.
             cmp ii, 181// Сравнение переменой ii с ограничением 181.
             jb k3 //  Переход по метке, если ii меньше 181.}
        
    //Перенос в регстр eax координаты точек прямой, кордината точки X и Y в одну ячейку.
    mov l,0// обнуляем переменную для строк Y.
    mov t,0//  обнуляем количество столбцов X.
    mov count,0// обнуляем переменую количества ячеик в матрице a.
 
k0:q1:mov edx,t //вносим в дежурный регистр колсчество столбцов, для передачи в 2 байтовую переменую x .
    mov x,dx // вносим в переменую количество столбцов из деж. регистра.
    mov edx,l//вносим переменую количество строк.
    mov y,dx //вносим в переменую из деж. регистра.
    imul edx,1100//умножаем количество строк на количество столбцов y*1100.
    add edx,t // прибавляем столбец для эффективного адреса y*1100+x.
     push ecx //
     xor ecx,ecx //
     push eax //
     xor eax,eax //
     lea eax,b //  Загружаем матрицу с точками, сканированой с экрана.
    mov ecx,[eax+4*edx] //переносим данные в регистр из памяти.
     pop eax //
    cmp ecx,1 //Сравниваем содержимое x с 1.
     pop ecx
    jnz n1
 
 
    { mov edx,h// для контроля.
     mov e,edx// для контроля.}
    mov dx,y//Заносим в младшее слово координату по Y, строка.
     {mov s,dx  // для контроля строк.}
    shl edx,16// Переносим младшее слово, координаты Y в старшее слово.
    mov dx,x //Заносим в младшее слово координаты по X, столбец.
    { mov v,dx// для контроля стопбцов.}
    push ecx //сохраняем содержанее edi, используем, как недостача регистров.
    xor ecx,ecx// Обнуляем ecx для на всякий случай.
    mov ecx,count // заносим в регистр номер текущей ячейки.
      {mov r,edi//для контроля.}
     push eax //
     xor eax,eax //
    lea eax,a // Загружаем матрицу, куда запишем координаты точки в двойное слово eax.
    mov dword[eax+4*ecx],edx // Переносим в память, регистор edx в с координатоми точки.
     pop eax //
     pop ecx//Возврщаем содержанее edi.
    inc count//Увеличеваем счетчик, для записи даных edx, в следующию ячейку.
 
 
n1: mov edx,t //переносим в дежурный регистр количество столбцов.
    inc edx //увеличиваем количество столбцов.
    mov t,edx // переносим из дежурного регистра в переменую количество столбцов.
    cmp edx,1101 //сравниваем количество столбцов с ограничением.
    jnz q1
    mov t,0 // обнуляем количество столбцов для следующий строки.
    mov edx,l // переносим из переменой строк в дежурный регистр.
    inc edx // переходим к следующей строке.
    mov l,edx // вносим в переменую строки из дежурного регистра.
    cmp edx,601 // сравниваем количество строк с ограничением.
    jnz k0
 
 
 
    k2: fldz//Установка i в 0.
        fst i// Установка переменой i в ноль.
        fst ii // Установка в 0 текущих градусов для перемнной ii эффективного адреса, не можем исползовать i для ii т.к. i это real, ii это integer.
 
    k1: fmul rn // i*3.14/180 Перевод градусы в радианы.
        fst d //Хранение i/180*3.14 Переведен градусы в радианы.
        fcos // Высчитывание cos .
        fmul rx // Умножение на x .
          {fst rx // Для контроля.}
        fld d // Загрузка в St(0) i*Pi/180 .Хранение в St(1) x*cos(i*Pi/180).
        fsin // Высчитывание sin .
          {fst rs //Для контроля.}
        fmul ry //Умножение на y .
          {fst ry // Для контроля.}
        fadd //Сложенее St(0) y*sin(i/180*Pi) и St(1) x*cos(i/180*Pi).Окончательный расчет x*cos(i)+y*sin(i)=r
        frndint //Округленее к ближайшему целом
 
 
         push edx // Сохраняем содержимое edx и используем edx.
         xor edx,edx// Очещаем edx, устанавливаем в нуль.
        mov edx,ix //Вносим текущее x для эффективного адресса.
          {mov kx, edx // Для контроля.}
        imul edx, 110340 //Умножаем x*(630*180) количество столбцов y на глубину i.
         push ecx //  Сохраняем содержимое edi и используем edi.
         mov ecx,iy //Вносим текущее y для эффективного адресса.
          {mov ky,ecx //  Для контроля.}
        imul ecx, 180 // Умножаем на 180
        add edx,ecx // Складиваем ix*110340+iy*180
         pop ecx //  Возвращаем содержимое edi.
        add edx, ii//Складиваем.
          {push edx //  Для контроля.
          xor edx,edx
          mov edx,ii
          mov ki,edx
          pop edx
          mov il,edx // для контроля.}
          push eax //
          xor eax,eax //
          lea eax, j
        fistp [eax+2*edx]// получаем [ecx+2*(ix*110340+iy*180+ii)]
          pop eax
      pop edx 
 
 
        fld1 // Заносим в ST0 1, для увелечения градуса i.
        fadd i //Увеличеваем на 1 i , градус.
        fcom c//Сравниваем с ограничением градусов c , до 180 ,включительно.
        fstsw ax//Перенос регистра состаяние сопроцессора в ax.
        sahf// Перенос регистра состаяние сопроцессора из ax в регистр флагов.
        fst i//Хранение текущей переменой градуса в i .
        fist ii // Запись текущих градусов для перемнной ii эффективного адреса.
        jb k1//Переход на начало цикла т.к. i градус мньше 180.
 
        fstp i//Освобожденее стека, для его балансировки.
        fld1// Вноситься 1 для прибавления к y.
        fadd ry // Увеличиваем y на 1.
        fcom re // Сравниваем y с ограничением.
        fstsw ax // Перенос регистра состаяния сопроцессора в ax.
        sahf // Перенос регистра состаяния сопроцесора из ax в регистр флагов.
        fist iy // Запись текущих y для перемнной iy эффективного адреса.
        fstp ry // Хранение текущей переменой y .
        jb k2// Переход на начало цикла т.к. y меньше ограничения.
 
        fldz // Установка 0 т.к. переменая y достигла ограничения.
        fstp ry //Установка переменой y в ноль.
        fld1 // Вноситься 1 для прибавления к x .
        fadd rx //Увеличиваем x на 1.
        fcom rl //Сравниваем x с ограничением.
        fstsw ax // Перенос регистра состаяния сопроцессора в ax.
        sahf // Перенос регистра состаяния сопроцесора из ax в регистр флагов.
        fist ix // Запись текущих x для перемнной ix эффективного адреса.
        fstp rx // Хранение текущей переменой x .
        jb k2// Переход на начало цикла т.к. x меньше ограничения.
 
        fldz // Установка 0 т.к. переменая y достигла ограничения, на всякий слчай.
        fstp rx //Установка переменой x в ноль, на всякий слчай }
 
 
    
 
 
end;
  begin
   f:=TFileStream.Create('C:\Pgrogram File\Borland\Delphi6\Progects\filename.txt',fmOpenReadWrite);
   f.Seek(0,soFromBeginning);
   f.Write(j,1118);
   f.Free;
  end;
  OperEnd:=DateTimeToTimeStamp(Now);
  Total:=OperEnd.Time-OperBegin.Time;
  
  ListBox1.Items.Add(IntToStr(Total)+' MSec');
end;
 
end.
Ответ: Спасибо большое.
Вопрос: Не могу скопировать файл функцией SHFileOperation

Копирую несколько файлов из одной папки в другую функцией API SHFileOperation.
В папке - приёмнике файлы с такими именами уже есть, они все перезаписываются.
Все файлы с одинаковыми свойствами - то есть не защищены от записи.

И вот почему то все, кроме одного нормально копируются, а на одном из них функция
SHFileOperation возвращает ошибку 87. Нашёл в сети текст этой ошибки:
"The source is a read-only DVD, possibly unformatted".

Но как это "привязать" к моей ситуации, не пойму... Если в файл-менеджере Windows
я пробую точно также скопировать этот файл - он нормально копируется, перезаписывая
в папке - приёмнике файл с таким же именем, а вот SHFileOperation почему-то не хочет..
Ответ: Товарищи, это чёто непонятное... Методом тыка нашёл причину ошибки, но она очень странная:

Ошибка 87 происходит только тогда, когда файл в источнике называется "LASTEDIT", причём
независимо от расширения. Как только я меняю в имени хоть одну букву, он начинает также
как и все остальные нормально копироваться...

Ну надо же такому совпадению случиться!.. Причём файл-менеджер Windows так не реагирует
и нормально копирует этот файл... Кто-нибудь сталкивался с этим обстоятельством и может
как-то прокомментировать такое поведение SHFileOperation ?